2011-12-29 14 views
3

xmlカラムの一部だけを取得し、それをSQLで独自の結果セットとして返すにはどうすればよいですか?結果セットとしてxmlカラムの一部を照会

私はこのようになります私のデータベースにXMLファイルを持っている:

<main> 
    <data> 
    <rows> 
     <_items> 
     <columns> 
      <values> 
      <keyvaluepairs> 
       <keyvaluepairofstringstring> 
       <key>EVENT</key> 
       <value>Wedding</value>    
       </keyvaluepairofstringstring> 
       <keyvaluepairofstringstring> 
       <key>DETAIL</key> 
       <value>Smith-Wesson</value>    
       </keyvaluepairofstringstring> 
      </keyvaluepairs>    
      </values> 
     </columns> 
     <columns> 
      <values> 
      <keyvaluepairs> 
       <keyvaluepairofstringstring> 
       <key>EVENT</key> 
       <value>Reunion</value>    
       </keyvaluepairofstringstring> 
       <keyvaluepairofstringstring> 
       <key>DETAIL</key> 
       <value>Class of 1996</value>    
       </keyvaluepairofstringstring> 
      </keyvaluepairs> 
      </values> 
     </columns> 
     <columns> 
      <values> 
      <keyvaluepairs> 
       <keyvaluepairofstringstring> 
       <key>EVENT</key> 
       <value>Pie-throwing contest</value>    
       </keyvaluepairofstringstring> 
       <keyvaluepairofstringstring> 
       <key>DETAIL</key> 
       <value>Cherry pies</value>    
       </keyvaluepairofstringstring> 
      </keyvaluepairs>    
      </values> 
     </columns> 
     </_items> 
    </rows> 
    </data> 
</main> 

をそして私はこのような結果セットとして、「行」を返すようにしたい:

EVENT     NAME 
Wedding     Smith-Wesson 
Reunion     Class of 1996 
Pie-throwing contest Cherry pies 
...etc... 

私が使用していますメソッドdescribed hereを使用して個々の値を照会しますが、実際に必要なすべてのデータを取得するには十分ではありません。私は、SQL Serverに2008

Editを使用してい

:明確にするためには、このXMLは、単一の行に含まれています。例えば、上記のXMLを返すために、私は

select my_xml_column from my_table; 
+1

単一のXML文字列または一連の行をクエリしていますか?また、あなたのXMLも間違って見えます:SQLサーバーはこれをXMLデータ型として受け入れません。 – gbn

+0

XMLエラーが修正されました。タグとデータを変更して匿名化し、終了タグを拾った。これは、SQL ServerのXML型の列に含まれており、単一の行に含まれています。 – JosephStyons

答えて

2

はこれを試して入力します。ここで

select X.N.value('(keyvaluepairofstringstring/value[../key = "EVENT"])[1]', 'varchar(100)') as EVENT, 
     X.N.value('(keyvaluepairofstringstring/value[../key = "DETAIL"])[1]', 'varchar(100)') as NAME 
from YourTable as T 
    cross apply T.XMLCol.nodes('/main/data/rows/_items/columns/values/keyvaluepairs') as X(N) 

テスト:http://data.stackexchange.com/stackoverflow/q/122873/

ところで、私はあなたのXMLを修正しなければなりませんでした。いくつかの欠落した終了タグがあります。

+0

あなたは最高です。ありがとう! (そして、私はxmlの終了タグを修正しました) – JosephStyons

関連する問題