Pibekarakteren har en særlig betydning i batch-kommandoer, så den skal være undsluppet ved hjælp af caret-karakteren. Dette burde virke:
DECLARE @Text AS VARCHAR(100)
DECLARE @Cmd AS VARCHAR(100)
SET @Text = 'Hello world^| '
SET @Cmd ='echo ' + @Text + ' > C:\AppTextFile.txt'
EXECUTE Master.dbo.xp_CmdShell @Cmd
Selvom dette virkelig ikke er en god måde at skrive data til en tekstfil på:normalt burde SQL Server ikke have tilladelse til at skrive til roden af C:-drevet og xp_cmdshell
er deaktiveret som standard. Jeg foreslår, at du ser på alternativer som sqlcmd.exe
, bcp.exe
eller et lille script på dit foretrukne sprog (PowerShell, Perl, Python, hvad som helst).
Det er generelt meget nemmere, sikrere og mere fleksibelt at forespørge data fra SQL Server, end det er at skubbe dem ud fra serversiden. I dit specifikke tilfælde ser det ud til, at du vil skrive en afgrænset fil ud, og bcp.exe
er beregnet til det formål
.