我在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'
有人可以提供帮助,我如何编写通用查询以根据传递的名称返回数据?
答案 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>
元素的名称和值: