Question

I have this code:

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;

A piece of the PRINT @SqlCommand out is:

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

And, on EXEC sp_ExecuteSQL @SqlCommand; I get:

Incorrect syntax near '<'.

What am I doing wrong?

Was it helpful?

Solution

How about not using openquery but instead cast the value to nvarchar(max) and use that as the parameter to the remote stored procedure?

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

EXEC [UIC160\SQLEXPRESS].TRZIC.dbo.AddCommissioning @var;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top