使用特定值

时间:2015-11-24 11:03:48

标签: sql sql-server

我在xml

类型的表列之一中有如下XML
<fields>
  <field>
    <name>SourceFileName</name>
    <value>ABCD</value>
  </field>
  <field>
    <name>Template</name>
    <value>XYZ</value>
  </field>
</fields>

我需要查询XML以获取字段/名称节点

中特定文本的值

我使用了下面的SQL但它没有返回第二个SQL的任何数据

SELECT *
FROM   xmltable
WHERE  XMLText.value('(/fields/field/name)**[1]**' ,'varchar(max)') LIKE 
       'Template'

SELECT *
FROM   xmltable
WHERE  XMLText.value('(/fields/field/name)**[1]**' ,'varchar(max)') LIKE 
       'SourceFileName'

而以下返回数据

SELECT *
FROM   xmltable
WHERE  XMLText.value('(/fields/field/name)**[2]**' ,'varchar(max)') LIKE 
       'Template'

有人可以提供帮助,我如何编写通用查询以根据传递的名称返回数据?

1 个答案:

答案 0 :(得分:1)

如果要处理多个 XML元素,则需要使用.nodes() XQuery函数。

尝试这样的事情:

SELECT
    Name = XC.value('(name)[1]', 'varchar(50)'),
    [Value] = XC.value('(value)[1]', 'varchar(25)')
FROM
    dbo.XmlTable
CROSS APPLY
    XmlText.nodes('/fields/field') AS XT(XC)

.nodes()来电将创建一个&#34;伪&#34;表XT,其中包含一个列XC,其中包含与该XPath表达式匹配的XML片段 - 在您的情况下,您将获得两行,每行代表一个<field>元素。< / p>

您现在可以&#34;进入&#34;这些XML片段并使用.value()调用提取您需要的数据 - 您可以通过以下方式获取两个 <field>元素的名称和值:

enter image description here