【发布时间】:2016-05-12 21:01:05
【问题描述】:
我知道已经有很多关于在 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()' requires a singleton (or empty sequence), found operand类型为'xdt:untypedAtomic '"
然后我尝试了这个:
SELECT doc.value('(/group/items/groupitem/key)[1]', 'nvarchar(255)') AS 'key'
FROM @xml.nodes('/group/items/groupitem/*') AS ref(doc)
这实际上给了我一些数据,但不幸的是,它是相同键 23137 的 4 倍,可能是语句中的 [1] 引起的。但是,删除它会使我回到与以前相同的错误消息。
我知道我应该如何在 Xpath (/group/items/groupitem/key) 中执行此操作,但无法理解如何在 T-Sql 中执行此操作。有什么想法吗?
【问题讨论】:
-
您是否有任何理由在
.nodes()中的XPath 表达式末尾添加一个星号?你期待不同的元素吗?
标签: sql sql-server xml