Znak potoku ma specjalne znaczenie w poleceniach wsadowych, więc musi być uciekł używając znaku karetki. To powinno działać:
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
Chociaż tak naprawdę nie jest to dobry sposób zapisywania danych do pliku tekstowego:zwykle SQL Server nie powinien mieć uprawnień do zapisu w katalogu głównym dysku C:i xp_cmdshell
jest domyślnie wyłączone. Proponuję spojrzeć na alternatywy, takie jak sqlcmd.exe
, bcp.exe
lub mały skrypt w preferowanym języku (PowerShell, Perl, Python, cokolwiek).
Zasadniczo znacznie łatwiej, bezpieczniej i elastyczniej jest wyszukiwać dane z SQL Server niż wypychać je ze strony serwera. W konkretnym przypadku wygląda na to, że chcesz napisać rozdzielany plik i bcp.exe
jest przeznaczony do tego celu
.