【问题标题】:Cursor for spliting t-sql @xml variable on elements level用于在元素级别拆分 t-sql @xml 变量的光标
【发布时间】:2015-03-05 16:35:59
【问题描述】:

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

例如:

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

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

&lt;root&gt;&lt;element id=10/&gt;&lt;element id=11/&gt;&lt;/root&gt;

然后

&lt;root&gt;&lt;element id=12/&gt;&lt;element id=13/&gt;&lt;/root&gt;

等等,其中n个元素pro cursor loop。

【问题讨论】:

  • 为什么要用光标来做这个?
  • 因为我可以将那么大的 xml 文件拆分成不同的事务

标签: sql-server xml tsql cursor


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多