0

我有这个代码:

DECLARE @xml_var XML
SET @xml_var = 
(
    SELECT ID_CODE AS '@ProductionId',
        CODE AS '@ItemId',
        CODE_LEVEL AS '@ItemPackagingLevelId',
        COMMISIONING_FLAG AS '@ItemFlag',
        TIMESPAN AS '@TimeStamp',
        USERNAME AS '@Username',
        SOURCE AS '@Source'
        FROM TRZIC.dbo.CODES_TEMP
    FOR XML PATH('Item'),
    ROOT('Commissioning')
)

DECLARE @xml_str NVARCHAR(MAX) = CONVERT(NVARCHAR(MAX), @xml_var)

 DECLARE @SqlCommand NVARCHAR(MAX) = N'SELECT *
 FROM OPENQUERY([UIC160\SQLEXPRESS],''EXEC TRZIC.dbo.AddCommissioning @data = ''' + @xml_str +''')'

-- DEBUG
PRINT @SqlCommand

EXEC sp_ExecuteSQL @SqlCommand;

PRINT @SqlCommand 的一部分是:

SELECT *
 FROM OPENQUERY([UIC160\SQLEXPRESS],'EXEC TRZIC.dbo.AddCommissioning @data = '<Commissioning><

而且,EXEC sp_ExecuteSQL @SqlCommand;我得到:

Incorrect syntax near '<'.

我究竟做错了什么?

4

1 回答 1

1

不使用openquery而是将值转换为nvarchar(max)并将其用作远程存储过程的参数怎么样?

DECLARE @var nvarchar(max);
SET @var = cast(@xml_var as nvarchar(max));

EXEC [UIC160\SQLEXPRESS].TRZIC.dbo.AddCommissioning @var;
于 2014-04-02T09:23:48.833 回答