XMLドキュメントのすべてのタグから値を選択するクエリをT-SQLで作成できるかどうかを探しています。
タグがいくつあるかわかりません。また、動的である必要があるため、名前もわかりません。出力の重要な形式ではなく(後で操作できます)、重要なのはすべてのタグからデータを取得します:)
ありがとう
XMLドキュメントのすべてのタグから値を選択するクエリをT-SQLで作成できるかどうかを探しています。
タグがいくつあるかわかりません。また、動的である必要があるため、名前もわかりません。出力の重要な形式ではなく(後で操作できます)、重要なのはすべてのタグからデータを取得します:)
ありがとう
あなたはこのようなことを試すことができます:
DECLARE @input XML = '..... add your XML here........'
SELECT
NodeName = Nod.value('local-name(.)', 'varchar(50)'),
NodeValue = Nod.value('.', 'varchar(50)')
FROM @input.nodes('//*') AS TBL(Nod)
これにより、XML内のすべてのノード(名前と値)が一覧表示されます。
警告:varchar(50)
ここでは、XMLノード要素のデータ型としてランダムに選択しました。それがあなたに適していない場合-必要に応じて適応してください!それらをすべて一度に変換するので、それらをすべて同じデータ型に変換する必要があります-そしてvarchar
かなり安全な選択のようです:-)
エッジテーブルopenxml
を取得するために使用できます。ノード値と属性値が表示されます。ノードとテキストが混在する複雑な XML がある場合は、値が別々の行に分割されます。
declare @xml xml
set @xml =
'<root Attrib="RootAttribute">
<item>Value item 1</item>
<item>
Value item 2
<subitem>sub value in 2</subitem>
More text in item 2
</item>
</root>'
declare @idoc int
exec sp_xml_preparedocument @idoc out, @xml
select *
from openxml(@idoc, '')
exec sp_xml_removedocument @idoc
結果:
id parentid nodetype localname prefix namespaceuri datatype prev text
0 NULL 1 root NULL NULL NULL NULL NULL
2 0 2 Attrib NULL NULL NULL NULL NULL
8 2 3 #text NULL NULL NULL NULL RootAttribute
3 0 1 item NULL NULL NULL NULL NULL
9 3 3 #text NULL NULL NULL NULL Value item 1
4 0 1 item NULL NULL NULL 3 NULL
6 4 3 #text NULL NULL NULL NULL Value item 2
5 4 1 subitem NULL NULL NULL 6 NULL
10 5 3 #text NULL NULL NULL NULL sub value in 2
7 4 3 #text NULL NULL NULL 5 More text in item 2
declare @xml xml
select
x.n.query('local-name(.)'),
x.n.value('(text())[1]','varchar(100)')
from @xml.nodes('//.') x(n)