我知道已经有很多关于在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>
我希望获得所有“key”项目,这样我就可以将它们插入表格中(因此有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)
这实际上给了我一些数据,但不幸的是,它4次使用了相同的键23137,可能是由于语句中的[1]引起的。然而,删除它会使我回到之前的错误消息。
我知道如何在Xpath中做到这一点(/group/items/groupitem/key),但不知道如何在T-Sql中实现。有什么想法吗?
.nodes()
末尾添加星号的原因是什么?你期望不同的元素吗? - Shnugo