2

SQLxmlタイプフィールドに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が到達する可能性のある深さはわかりません。

誰かが私を正しい方向に向けることができますか?

ありがとう!

4

1 に答える 1

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>
于 2011-06-08T10:06:45.397 に答える