Pipetecknet har en speciell betydelse i batchkommandon, så det måste vara rymde med hjälp av caret-karaktären. Detta borde fungera:
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
Även om detta verkligen inte är ett bra sätt att skriva data till en textfil:vanligtvis ska SQL Server inte ha behörighet att skriva till roten av C:-enheten och xp_cmdshell
är inaktiverat som standard. Jag föreslår att du tittar på alternativ som sqlcmd.exe
, bcp.exe
eller ett litet skript på ditt föredragna språk (PowerShell, Perl, Python, vad som helst).
Det är i allmänhet mycket enklare, säkrare och mer flexibelt att söka efter data från SQL Server än att trycka ut det från serversidan. I ditt specifika fall ser det ut som att du vill skriva ut en avgränsad fil och bcp.exe
är avsedd för det ändamålet
.