【发布时间】:2019-10-02 01:58:24
【问题描述】:
我希望这不是一个重复的问题。我在这个网站上搜索了我的问题,但我没有找到任何东西,所以这是我的问题......
我正在使用 XQuery 将 XML 文档解析为 SQL 服务器结果集。由于一些重复的节点名称/值对,我得到了重复。为什么我会收到这些重复项?
非常感谢任何帮助或帮助。
XML:
<root>
<record>
<recordid>1</recordid>
<tests>
<test name="Food" value="Apple" />
<test name="Drink" value="Water" />
</tests>
</record>
<record>
<recordid>2</recordid>
<tests>
<test name="Food" value="Banana" />
<test name="Drink" value="Orange Juice" />
</tests>
<tests>
<test name="Food" value="Steak" />
<test name="Drink" value="Beer" />
</tests>
</record>
</root>
SQL:
DECLARE
@XML XML = '<root><record><recordid>1</recordid><tests><test name="Food" value="Apple" /><test name="Drink" value="Water" /></tests></record><record><recordid>2</recordid><tests><test name="Food" value="Banana" /><test name="Drink" value="Orange Juice" /></tests><tests><test name="Food" value="Steak" /><test name="Drink" value="Beer" /></tests></record></root>'
DECLARE @XMLTable AS TABLE (
MyXML XML
)
INSERT INTO @XMLTable(MyXML)
VALUES(@XML)
SELECT
rec.c.value('recordid[1]', 'INT') AS RecordId,
t.c.value('test[@name="Food"][1]/@value[1]', 'VARCHAR(15)') AS Food,
t.c.value('test[@name="Drink"][1]/@value[1]', 'VARCHAR(15)') AS Drink
FROM @XMLTable AS x
CROSS APPLY MyXML.nodes('/root/record') rec(c)
OUTER APPLY MyXML.nodes('/root/record/tests') t(c)
结果:
RecordId Food Drink
----------- --------------- ---------------
1 Apple Water
1 Banana Orange Juice
1 Steak Beer
2 Apple Water
2 Banana Orange Juice
2 Steak Beer
预期结果:
RecordId Food Drink
----------- --------------- ---------------
1 Apple Water
2 Banana Orange Juice
2 Steak Beer
【问题讨论】:
标签: sql-server xml xpath duplicates xquery