gpt4 book ai didi

sql - 在 T-SQL 中解析 XML

转载 作者:行者123 更新时间:2023-12-05 04:13:33 26 4
gpt4 key购买 nike

我知道已经有很多关于在 MS T-SQL 中查询 xml 的主题,但是对于所有示例,我无法让我的查询正常工作。

我有以下 XML:

<group>
<items>
<groupitem>
<key>23137</key>
</groupitem>
<groupitem>
<key>23139</key>
</groupitem>
<groupitem>
<key>23151</key>
</groupitem>
<groupitem>
<key>23153</key>
</groupitem>
</items>
</group>

我想获取所有“关键”项,以便我可以将它们插入到表中(所以 4 行)

我开始将我的 xml 放入变量 @xml 并运行此查询:

SELECT doc.value('(key/text())[1]', 'nvarchar(255)') AS 'key'
FROM @xml.nodes('/group/items/groupitem/*') AS ref(doc)

这给了我 4 个空行,如果我删除 [1],它会给我这个错误:“XQuery [value()]: '*value()' 需要一个单例(或空序列),找到操作数类型为 'xdt:untypedAtomic '

然后我试了一下:

SELECT doc.value('(/group/items/groupitem/key)[1]', 'nvarchar(255)') AS 'key'
FROM @xml.nodes('/group/items/groupitem/*') AS ref(doc)

这实际上给了我一些数据,但不幸的是,它是相同 key 23137 的 4 次,可能是由语句中的 [1] 引起的。然而,删除它会让我回到与以前相同的错误消息。

我知道我应该如何在 Xpath (/group/items/groupitem/key) 中执行此操作,但无法理解我应该如何在 T-Sql 中执行此操作。有什么想法吗?

最佳答案

在下面的查询中,doc 的上下文元素已经是 key 元素:

SELECT doc.value('(key/text())[1]', 'nvarchar(255)') AS 'key'
FROM @xml.nodes('/group/items/groupitem/*') AS ref(doc)

所以你不应该在 select 子句中再次提到 key。您可以使用 . 来引用当前上下文元素:

SELECT doc.value('.', 'nvarchar(255)') AS 'key'
FROM @xml.nodes('/group/items/groupitem/*') AS ref(doc)

关于sql - 在 T-SQL 中解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37186954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com