2012-06-06 2 views
1

Я получил этот запрос:SQL XQuery - Вставьте целое SQL значение переменной в переменную XML

DECLARE @UserId INT 
DECLARE @StateChangeInformation XML 

SET @UserId = 1 
SET @StateChangeInformation = '<stateChangeInformation EnableOverrideMarking="1"></stateChangeInformation>' 
SET @command = 'DECLARE @UserIdXml XML; SET @UserIdXml = ''<userID>{ sql:variable("@UserId") }</userID>''; SET @StateChangeInformation.modify(''insert sql:variable("@UserIdXml") into (/stateChangeInformation)[1]'')' 

EXEC sp_executesql @stmt = @command, 
        @params = N'@StateChangeInformation xml out', 
        @StateChangeInformation= @StateChangeInformation OUTPUT 

SELECT @StateChangeInformation 

То, что я хочу сделать, это вывести XML как:

<stateChangeInformation> 
    <userID>1</userID> 
</stateChangeInformation> 

В настоящее время я я получаю следующий результат:

<stateChangeInformation EnableOverrideMarking="1"> 
    <userID>"{ sql:variable("@UserId") }"</userID> 
</stateChangeInformation> 

Пожалуйста, помогите!

ответ

2

Необходимо указать @UserId в качестве параметра динамическому SQL и использовать конкатенацию для получения значения в XML.

DECLARE @command nvarchar(max) 
DECLARE @UserId INT 
DECLARE @StateChangeInformation XML 

SET @UserId = 1 
SET @StateChangeInformation = '<stateChangeInformation EnableOverrideMarking="1"></stateChangeInformation>' 
SET @command = 'DECLARE @UserIdXml XML; 
       SET @UserIdXml = ''<userID>''+cast(@UserId as varchar(10))+''</userID>''; 
       SET @StateChangeInformation.modify(''insert sql:variable("@UserIdXml") into (/stateChangeInformation)[1]'')' 

EXEC sp_executesql @stmt = @command, 
        @params = N'@StateChangeInformation xml out, @UserId int', 
        @StateChangeInformation= @StateChangeInformation OUTPUT, @UserId = @UserId 

SELECT @StateChangeInformation 
+1

Да, я уже понял это. Я сделал именно так, как вы сказали, поэтому я буду отмечать ваш ответ: D Спасибо в любом случае! –