2016-09-08 5 views
1

Привет у меня есть этот примерсохранить результат ехес sp_excutequery с помощью XPath

DECLARE 
@XML1 xml, 
@XPath nvarchar(200), 
@EncodedXPath nvarchar(200), 
@Sql nvarchar(max), 
@val nvarchar(20) 

SET @XML1=' 
<Root> 
<Device> 
    <Inspection> 
     <Status>OK</Status> 
    </Inspection> 
</Device> 
</Root>' 

SELECT @XML1.query('/Root[1]/Device[1]/Inspection[1]/Status[1]') 
SELECT @XML1.value('/Root[1]/Device[1]/Inspection[1]/Status[1]','varchar(5)') 


SET @XPath = '/Root[1]/Device[1]/Inspection[1]/Status[1]' 
SET @EncodedXPath = REPLACE(@XPath, '''', '''''') 

SET @Sql = N'SELECT @XML1.query(''' + @EncodedXPath + N''')' 
EXEC sp_executesql @Sql, N'@XML1 xml', @XML1 

SET @Sql = N'SELECT @XML1.value(''' + @EncodedXPath + N''', ''varchar(5)'')' 
EXEC sp_executesql @Sql, N'@XML1 xml', @XML1 

если выполнить код, приведенный выше вы получите тот же результат, но как я могу присвоить результат динамического SQL к переменной с помощью XPath? в приведенном ниже примере возвращать только результат выполнения, но я хочу, чтобы вернуть значение «OK»

EXEC @ret = sp_executesql @Sql, N'@XML1 xml', @XML1 

ответ

1

Подход должен быть таким же, как получить результат любого sp_executesql в переменную, независимо от sp_executesql содержит XPath или просто простой SQL.

Это один из возможных способов, который также предлагается в «How to get sp_executesql result into a variable?». Измените динамический SQL, чтобы иметь выходную переменную для хранения результата запроса XPath. Затем вы можете установить свою статическую переменную - заявленную за пределами sp_executesql - из значения выходной переменной:

.... 
SET @Sql = N'SET @ret = @XML1.value(''' + @EncodedXPath + N''', ''varchar(5)'')' 
EXEC sp_executesql @Sql, N'@XML1 xml, @ret varchar(5) output', @XML1, @ret = @ret output