入れ子になったXML要素をどのようにプルしてSQLのテーブル結果にするかを考えています。 WorkItemには常にグループがありますが、グループフィールドはN回ネストできます。このようなXMLフィールドのうちのフィールドだけを引っ張るための簡単な方法があります:XMLの要素をSQLで抽出する
declare @xml XML = '
<WorkItem>
<Group Name="Base" >
<Field FieldId="361" Name="Assigned To" />
<Field FieldId="362" Name="Stuff" />
<Group Name="Detail">
<Field FieldId="363" Name="Assigned To 2" />
</Group>
</Group>
</WorkItem>'
declare @handle int
declare @status int
exec @status = sp_xml_preparedocument @handle output, @xml
select *
from openxml(@handle, 'WorkItem/Group/Field')
with (
FieldId int,
Name varchar(max)
)
exec sp_xml_removedocument @handle
私は取得しています何
:
361,Assigned To
362,Stuff
を私は期待してい何:
361,Assigned To
362,Stuff
363,Assigned To 2
を
ありがとうございます!
私は[、(すぐに使用できるサンプルデータのための1)をrextesterためにあなたのサンプルをコピーして貼り付け私は問題を再現できません。](http://rextester.com/DRNX91743) –
Btw:対応するSPを用意して文書を削除するための 'FROM OPENXML'は古くなっており、これ以上使用することはできません例外が存在する)。むしろ適切な[XMLデータ型が提供するメソッド](https://msdn.microsoft.com/en-us/library/ms190798.aspx)を使用してください。 – Shnugo