用于在元素级别拆分 t-sql @xml 变量的游标

Cursor for spliting t-sql @xml variable on elements level

我需要定义一些游标来将元素级别的 t-sql @xml 变量拆分为不同的 @xml(s).

例如:

<root>
<element id=10/>
<element id=11/>
<element id=12/>
<element id=13/>
</root>

以便在 tsql 游标内获取以下值:

<root><element id=10/><element id=11/></root>

然后

<root><element id=12/><element id=13/></root>

依此类推,其中 n 个元素支持游标循环。

好吧,您可以使用内置函数来操作 XML。例如下面的语句:

DECLARE @XML XML = N'<root><element id="10"/><element id="11"/><element id="12"/><element id="13"/></root>'

SELECT  ROW_NUMBER() OVER (ORDER BY T.c) 
       ,T.c.query('.')
FROM @XML.nodes('root/element') T(c)

将为您提供所有 elements 保留它们在 XML 结构中的顺序:

然后您可以存储此结果并构建单独的较小 XML 变量。


对于不同的元素,您可以像这样使用 *

DECLARE @XML XML = N'<root><element1 id="10"/><element2 id="11"/><element3 id="12"/><element4 id="13"/></root>'

SELECT  ROW_NUMBER() OVER (ORDER BY T.c) 
       ,T.c.query('.')
FROM @XML.nodes('root/*') T(c)