我需要通过SQL查询创建一些XML。我需要增加一个名称文件,但是使用我的代码,系统会返回错误
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函数中,但结果不会改变
你能帮我吗?
答案 0 :(得分:1)
首先创建命令文本
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;
答案 1 :(得分:0)
现在,如果我执行单个查询
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
@header被声明为XML
让我知道感谢和问候