2014-04-02 16 views
0

我有這樣的代碼:OPENQUERY處理XML數據:附近有語法錯誤 '<'

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; 

一塊印刷@SqlCommand的是:

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

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

Incorrect syntax near '<'

我在做什麼錯?

回答

1

如何不使用openquery而是將值轉換爲nvarchar(max)並將其用作遠程存儲過程的參數?

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

EXEC [UIC160\SQLEXPRESS].TRZIC.dbo.AddCommissioning @var;