O caractere pipe tem um significado especial em comandos em lote, portanto, deve ser escapou usando o caractere de acento circunflexo. Isso deve funcionar:
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
Embora essa não seja realmente uma boa maneira de gravar dados em um arquivo de texto:geralmente o SQL Server não deve ter permissão para gravar na raiz da unidade C:e
xp_cmdshell
está desabilitado por padrão. Eu sugiro que você veja alternativas como sqlcmd.exe
, bcp.exe
ou um pequeno script em seu idioma preferido (PowerShell, Perl, Python, qualquer que seja). Geralmente, é muito mais fácil, seguro e flexível consultar dados do SQL Server do que empurrá-los para fora do lado do servidor. No seu caso específico, parece que você deseja escrever um arquivo delimitado e
bcp.exe
destina-se a esse fim
.