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

时间:2015-03-05 16:36:00

标签: sql-server xml tsql cursor

我需要定义一些游标,用于将元素级别的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个元素pro游标循环。

1 个答案:

答案 0 :(得分:2)

好吧,您可以使用内置函数来操作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

enter image description here

然后,您可以存储此结果并构建单独的较小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)

enter image description here