1

以下はうまくいきます。しかし、属性や列名なしで動的に読み取りたい

サンプル XML

declare @xmlval xml='<ArrayOfCustomers>
   <Customer>
       <ItemId>1</ItemId>
       <Value>Mr Smith</Value>
   </Customer>
   <Customer>
      <ItemId>2</ItemId>
      <Value>Mr Bloggs</Value>
   </Customer>
</ArrayOfCustomers>'

サンプルクエリ

SELECT
   Cust.value('(ItemId)[1]', 'int') AS 'ItemID',
   Cust.value('(Value)[1]', 'Varchar(50)') AS 'Customer Name'
FROM
   @xmlval.nodes('/ArrayOfCustomers/Customer') AS AOC(Cust)

上記は正常に動作します。select ステートメントで属性名を指定せずに xml 値から値を取得する方法。

-- 必要なクエリのサンプル形式例:

SELECT
   Cust.value('[0][1]', 'int') AS 'ItemID',
   Cust.value('[1][1]', 'Varchar(50)') AS 'Customer Name'

また

SELECT
   Cust.value('[1]', 'int') AS 'ItemID',
   Cust.value('[1]', 'Varchar(50)') AS 'Customer Name'
FROM
   @xmlval.nodes('/ArrayOfCustomers/Customer') AS AOC(Cust)

私たちの場合、入力 @xmlval 値の列名または属性名についてはわかりません。xml 値を新しいテーブルに挿入したい (int,varchar(50))

ありがとう、ヴェルザンカー

4

1 に答える 1

0

ですべての要素を選択して*から、最初に 、次に で取得[1]でき[2]ます。

select
   Cust.value('*[1]', 'int') AS 'ItemID',
   Cust.value('*[2]', 'Varchar(50)') AS 'Customer Name'
from @xmlval.nodes('/ArrayOfCustomers/Customer') as AOC(Cust) 

sql fiddle demo

于 2013-10-28T11:14:09.293 に答える