Символът за тръба има специално значение в груповите команди, така че трябва да бъде избяга използвайки знака карета. Това трябва да работи:
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
Въпреки че това наистина не е добър начин за запис на данни в текстов файл:обикновено SQL Server не трябва да има разрешение да пише в корена на устройството C:и xp_cmdshell
е деактивирано по подразбиране. Предлагам ви да разгледате алтернативи като sqlcmd.exe
, bcp.exe
или малък скрипт на предпочитания от вас език (PowerShell, Perl, Python, какъвто и да е).
Като цяло е много по-лесно, по-безопасно и по-гъвкаво да се правят заявки за данни от SQL Server, отколкото да се изтласкват от страната на сървъра. Във вашия конкретен случай изглежда, че искате да напишете файл с разделители и bcp.exe
е предназначен за тази цел
.