MSSQL 2008获得所有级别的项目

时间:2011-06-08 09:58:07

标签: tsql xquery-sql

说我在SQL xml类型字段中有xml,例如

    @x='<root>
         <item>
           <title></title>
           <item>
             <title></title>
           </item>
         </item>
       </root>'

我如何在查询中获取第n级项目?

显然要获得你要使用的第一级;

    select
     t.p.query('.')
    from
     @x.nodes('/root/item') t(p)

并且为了获得下一个级别,你会添加

    cross apply
         @x.nodes('/root/item/item')

但是在运行时我们不知道xml可能达到的深度。

任何人都可以指出我正确的方向。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您想要所有项目节点,您可以这样做

select t.p.query('.')
from @x.nodes('//item') t(p)

结果:

(No column name)
<item><title /><item><title /></item></item>
<item><title /></item>

如果你只想要最里面的项目节点,你可以这样做

select
  t.p.query('.')
from @x.nodes('//item[count(item) = 0]') t(p)

结果:

(No column name)
<item><title /></item>