Ошибка в запросе exec master xp_cmdshell BCP - PullRequest
0 голосов
/ 05 июля 2019

Мне нужно создать XML из запроса SQL. Мне нужно увеличить имя файла, но с моим кодом система возвращает ошибку

Messaggio 102, livello 15, stato 1, riga 89
Неверный синтаксис рядом с '+'.

Эта ошибка относится к части кода в

exec master.. `'+@num'+`

ниже кода; переменная @num имеет тип nvarchar

SET @num = (SELECT CAST([incr_num] AS NVARCHAR(10)) FROM [DB01].[dbo].[NUM_XML])

EXEC master..xp_cmdshell 'bcp "SELECT @header,@inland FOR XML RAW(''''),ROOT(''root''), ELEMENTS, TYPE" queryout "\\server01\TEMP_SW\XML_TMS\test_'+@num+'.xml" -U xx -P xxxxx -c -C ANSI -t;'

Я пытаюсь вставить весь путь в другую переменную и присоединить эту новую переменную в функции exec, но результат не изменится

Вы можете мне помочь?

Ответы [ 2 ]

1 голос
/ 05 июля 2019

Сначала создайте текст команды

declare @cmd varchar(2000) = 'bcp "SELECT @header,@inland FOR XML RAW(''''),ROOT(''root''), ELEMENTS, TYPE" queryout "\\server01\TEMP_SW\XML_TMS\test_'+@num+'.xml" -U xx -P xxxxx -c -C ANSI -t;' ;
exec master..xp_cmdshell @cmd;
0 голосов
/ 05 июля 2019

Теперь, если я выполню один запрос

SELECT @header,@inland FOR XML RAW(''),ROOT('root'), ELEMENTS, TYPE

Я получаю правильные данные XML.

Но если я вставлю запрос в exec master..xp_cmdshell

declare @cmd varchar(2000) = 'bcp "SELECT @header,@inland FOR XML RAW(''''),ROOT(''root''), ELEMENTS, TYPE" queryout "\\server01\TEMP_SW\XML_TMS\test_'+@num+'.xml" -U xx -P xxxxx -c -C ANSI -t;' ;
exec master..xp_cmdshell @cmd;

Система вернет ошибку

SQLState = 37000, NativeError = 137
Error = [Microsoft][SQL Native Client][SQL Server]Must declare the scalar variable "@header".
SQLState = 37000, NativeError = 8180
Error = [Microsoft][SQL Native Client][SQL Server]Statement(s) could not be prepared.
NULL

@ заголовок объявлен как XML

Дайте мне знать, спасибо и привет

...