使用xpath保存exec sp_excutequery的结果

时间:2016-09-08 20:04:02

标签: sql-server xpath dynamic-sql

嗨,我有这个例子

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 

如果您执行上面的代码,您会得到相同的结果,但是如何使用xpath将动态sql的结果分配给变量?以下示例仅返回执行结果,但我想返回值'OK'

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

1 个答案:

答案 0 :(得分:1)

该方法应该与将任何sp_executesql的结果放入变量相同,无论sp_executesql包含XPath还是纯SQL。

这是一种可能的方式,也在&#34; How to get sp_executesql result into a variable?&#34; 中提出。修改动态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