5

XMLドキュメントのすべてのタグから値を選択するクエリをT-SQLで作成できるかどうかを探しています。

タグがいくつあるかわかりません。また、動的である必要があるため、名前もわかりません。出力の重要な形式ではなく(後で操作できます)、重要なのはすべてのタグからデータを取得します:)

ありがとう

4

3 に答える 3

2

あなたはこのようなことを試すことができます:

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かなり安全な選択のようです:-)

于 2012-08-13T13:39:04.467 に答える
0

エッジテーブル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
于 2012-08-13T14:01:49.640 に答える
0
declare @xml xml

select 
    x.n.query('local-name(.)'),
    x.n.value('(text())[1]','varchar(100)')
from @xml.nodes('//.') x(n)
于 2012-08-13T13:41:08.913 に答える