如何从存储过程中的XML列读取特定节点

时间:2014-03-14 17:06:54

标签: xml tsql

我从tsql存储过程中的各种表中提取数据,其中一个字段是XML列。此XML的每个子节点都有2个子节点:问题和答案。

xml结构如下所示:

<QuestionXML> <QuestionCollection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Questions> <QuestionModel> <Question>Color</Question> <Answer>Blue</Answer> </QuestionModel> <QuestionModel> <Question>Tall</Question> <Answer>False</Answer> </QuestionModel> </Questions> </QuestionCollection> </QuestionXML>

我需要找到名称与我传入的字符串匹配的问题节点,并且我想检索其Answer sibling的值。

第1部分:我想使用所需的XML语法,它相当于: (从问题中选择答案问题=&#39;颜色&#39;)AS&#39;颜色&#39;

第2部分:我想从XML列中选择我的XML值,这是嵌套SELECT语句的结果。

(  选择答案

FROM(SELECT F.QuestionXML FROM XMLTable F WHERE F.PIN = @PIN)

问题=&#39;颜色&#39; )AS&#39; COLOR&#39;

我无法正确使用XML语法。

如果有人能够为我提供正确的XML语法,我想我可以让我自己完成第2部分。

由于

1 个答案:

答案 0 :(得分:0)

第1部分,假设您的xml位于名为@x:

的xml变量中
SELECT @x.query('//Answer/..[Question="Color"]/Answer')

来自表格:

SELECT xmlcolumn.query('//Answer/..[Question="Color"]/Answer/text()') from tablewithXMLcolumn