El carácter de tubería tiene un significado especial en los comandos por lotes, por lo que debe ser escapado utilizando el carácter de intercalación. Esto debería 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
Aunque esta no es realmente una buena manera de escribir datos en un archivo de texto:por lo general, SQL Server no debería tener permiso para escribir en la raíz de la unidad C:y xp_cmdshell
está deshabilitado por defecto. Le sugiero que busque alternativas como sqlcmd.exe
, bcp.exe
o un pequeño script en su idioma preferido (PowerShell, Perl, Python, lo que sea).
Por lo general, es mucho más fácil, más seguro y más flexible consultar datos de SQL Server que extraerlos del lado del servidor. En su caso específico, parece que desea escribir un archivo delimitado y bcp.exe
está destinado a ese propósito
.