exec master xp_cmdshell BCP查询中的错误

时间:2019-07-05 07:50:37

标签: sql sql-server bcp

我需要通过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函数中,但结果不会改变

你能帮我吗?

2 个答案:

答案 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

让我知道感谢和问候