分解 xml 列
我有一个 XML 列,其中包含这样的 XML:
<Set>
<Element>
<ID>
1
</ID>
<List>
<ListElement>
<Part1>
ListElement 1
</Part1>
</ListElement>
<ListElement>
<Part1>
ListElement2
</Part1>
</ListElement>
</List>
</Element>
<Element>
<ID>
2
</ID>
<List>
<ListElement>
<Part1>
ListElement3
</Part1>
</ListElement>
<ListElement>
<Part1>
ListElement4
</Part1>
</ListElement>
</List>
</Element>
</Set>
我想将其分解为包含以下内容的关系表:
ID, ListElement
1, ListElement1
1, ListElement2
2, ListElement3
2, ListElement4
我能够使用类似这样的内容获取零件的内容:
select
List.value('(Part1/text())[1]', 'varchar(max)') as test
from
Table CROSS APPLY
xml.nodes('// Element/List/ListElement') AS List(List)
但我还没有实现保留“外国” key'(ID 值)。
谢谢。
最好的祝愿,
克里斯蒂安
I have a XML column which contains XML like this:
<Set>
<Element>
<ID>
1
</ID>
<List>
<ListElement>
<Part1>
ListElement 1
</Part1>
</ListElement>
<ListElement>
<Part1>
ListElement2
</Part1>
</ListElement>
</List>
</Element>
<Element>
<ID>
2
</ID>
<List>
<ListElement>
<Part1>
ListElement3
</Part1>
</ListElement>
<ListElement>
<Part1>
ListElement4
</Part1>
</ListElement>
</List>
</Element>
</Set>
I would like to shred this into a relation table containing this:
ID, ListElement
1, ListElement1
1, ListElement2
2, ListElement3
2, ListElement4
I am able to obtain the content of the Parts using something like this:
select
List.value('(Part1/text())[1]', 'varchar(max)') as test
from
Table CROSS APPLY
xml.nodes('// Element/List/ListElement') AS List(List)
but I have not yet achieved to keep the ‘foreign key’ (the ID value).
Thanks.
Best wishes,
Christian
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试这个而不是您的查询:
再次更新 - 现在回到只有一个 CROSS APPLY,使用 XPath 中的
../../ID
回到祖父母的“ID”元素。还消除了//Element
XPath,转而使用/Set/Element
(//Element
xpath 是出了名的慢)Try this instead of your query:
Updated again - now back to only one CROSS APPLY, reaching back up into the grand parent's "ID" element using
../../ID
in XPath. Also eliminated the//Element
XPath in favour of/Set/Element
(the//Element
xpaths are notoriously slow)如果有人想使用 XQuery 执行此操作:
其中 $table 是原始 XML
返回
In case anyone wants to do this with XQuery:
where $table is the original XML
returns