Znak roury má v dávkových příkazech zvláštní význam, takže musí být unikl pomocí znaku stříšky. Mělo by to fungovat:
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
Ačkoli to opravdu není dobrý způsob, jak zapisovat data do textového souboru:SQL Server by obvykle neměl mít oprávnění zapisovat do kořenového adresáře jednotky C:a xp_cmdshell
je ve výchozím nastavení zakázáno. Navrhuji, abyste se podívali na alternativy jako sqlcmd.exe
, bcp.exe
nebo malý skript ve vašem preferovaném jazyce (PowerShell, Perl, Python, cokoliv).
Obecně je mnohem snazší, bezpečnější a flexibilnější dotazovat se na data ze serveru SQL, než je vytlačovat ze strany serveru. Ve vašem konkrétním případě to vypadá, že chcete vypsat soubor s oddělovači a bcp.exe
je k tomuto účelu určen
.