【发布时间】:2019-02-01 21:00:17
【问题描述】:
XML 使用 xml 数据类型存储在 SQL Server 中的表中。
CREATE TABLE MyTable(
i int primary key,
XmlField xml NULL
)
insert into MyTable(i, xmlField)
values(1, N'<root>
<Area1>
<Parent>
<Name>ParentJay</Name>
<Spouse>Janice</Spouse>
<child>John
<grandchild>Kate</grandchild>
<grandchild>Moss</grandchild>
<grandchild>Ruby</grandchild>
<grandchild>Violet</grandchild>
</child>
</Parent>
<Parent>
<Name>ParentMark</Name>
<Spouse>May</Spouse>
<child>Mary
<grandchild>Violet</grandchild>
<grandchild>Kate</grandchild>
<grandchild>jubi</grandchild>
</child>
</Parent>
<Parent>
<Name>ParentJoe</Name>
<Spouse>kim</Spouse>
<child>Kelly
<grandchild>Moss</grandchild>
<grandchild>Kate</grandchild>
</child>
</Parent>
<Parent>
<Name>ParentMike</Name>
<Spouse>Mia</Spouse>
<child>Mary
<grandchild>Jeff</grandchild>
<grandchild>jubi</grandchild>
<grandchild>Violet</grandchild>
</child>
</Parent>
</Area1>
</root>')
问题:获取孙子名称为 Kate 和 Moss 的所有子节点
我有查询要让子元素由一个孙子 Kate 过滤。
有没有办法在查询中使用和/或过滤多个孙子的名字(凯特和莫斯)。
declare @v varchar(20)
set @v='Kate'
SELECT
child = x.value('local-name(..)', 'varchar(50)'),
value = x.value('(..)', 'varchar(50)')
FROM MyTable
CROSS APPLY XmlField.nodes('/root/Area1/Parent/child/*[contains((.),sql:variable("@v"))] ' ) as T2(x)
Result
child value
child John KateMossRubyViolet
child Mary VioletKatejubi
child Kelly MossKate
Result looking for:
child value
child John KateMossRubyViolet
child Kelly MossKate
【问题讨论】:
标签: sql-server xml