Das Pipe-Zeichen hat in Stapelbefehlen eine besondere Bedeutung, daher muss es entgangen mit dem Caret-Zeichen. Das sollte funktionieren:
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
Obwohl dies wirklich keine gute Möglichkeit ist, Daten in eine Textdatei zu schreiben:Normalerweise sollte SQL Server keine Berechtigung haben, in das Stammverzeichnis von Laufwerk C:und xp_cmdshell
zu schreiben ist standardmäßig deaktiviert. Ich schlage vor, Sie schauen sich Alternativen wie sqlcmd.exe
an , bcp.exe
oder ein kleines Skript in Ihrer bevorzugten Sprache (PowerShell, Perl, Python, was auch immer).
Es ist im Allgemeinen viel einfacher, sicherer und flexibler, Daten von SQL Server abzufragen, als sie von der Serverseite zu übertragen. In Ihrem speziellen Fall sieht es so aus, als ob Sie eine Datei mit Trennzeichen schreiben möchten, und bcp.exe
ist für diesen Zweck vorgesehen
.