Le caractère pipe a une signification particulière dans les commandes batch, il doit donc être échappé en utilisant le caractère caret. Cela devrait fonctionner :
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
Bien que ce ne soit vraiment pas un bon moyen d'écrire des données dans un fichier texte :généralement, SQL Server ne devrait pas avoir l'autorisation d'écrire à la racine du lecteur C:, et xp_cmdshell
est désactivé par défaut. Je vous suggère de regarder des alternatives comme sqlcmd.exe
, bcp.exe
ou un petit script dans votre langage préféré (PowerShell, Perl, Python, peu importe).
Il est généralement beaucoup plus facile, plus sûr et plus flexible d'interroger les données de SQL Server que de les pousser du côté serveur. Dans votre cas spécifique, il semble que vous souhaitiez écrire un fichier délimité et bcp.exe
est destiné à cette fin
.