8

データが必要なノードがすべて同じ名前であるXMLファイルがあります。最初の(または2番目のレコード)にアクセスする方法を理解しているので、次のクエリでは2番目の作成者(<a1>タグ)のみが表示されます。すべての著者を単一の列として取得するにはどうすればよいですか?

      DECLARE @MyXML XML
      SET @MyXML = '<refworks>
            <reference>
               <rt>Journal Article</rt> 
               <sr>Print(0)</sr> 
               <id>869</id> 
               <a1>Aabye,Martine G.</a1> 
               <a1>Hermansen,Thomas Stig</a1> 
               <a1>Ruhwald,Morten</a1> 
               <a1>PrayGod,George</a1> 
               <a1>Faurholt-Jepsen,Daniel</a1> 
               <a1>Jeremiah,Kidola</a1> 
               <a1>Faurholt-Jepsen,Maria</a1> 
               <a1>Range,Nyagosya</a1> 
           </reference>
         </refworks>'

      SELECT 
          author.value('(a1)[2]', 'varchar(MAX)') AS 'Author'
      FROM @MyXML.nodes('/refworks/reference') AS ref(author)
4

1 に答える 1

16

これを試して :-

  SELECT 
      author.value('./text()[1]', 'varchar(MAX)') AS 'Author'
  FROM @MyXML.nodes('//refworks/reference/child::node()') AS ref(author)
  where  author.value('local-name(.)[1]', 'varchar(100)') ='a1'

child :: node()は、軸の区切り文字childである軸指定子を表します。::

ノードでドリルダウンするために使用される子軸を理解するために、このMSDNドキュメントにあります。

またはSQLサーバーでxmlデータを操作する

更新しました :-

はるかに簡単な方法あなたは正しい方向に進んでいました。データをフィルタリングするためのfrom句で子ノードを指定してください

 SELECT 
      author.value('(.)[1]', 'varchar(MAX)') AS 'Author'
  FROM @MyXML.nodes('/refworks/reference/a1') AS ref(author)
于 2013-03-12T05:25:45.237 に答える