7

私はこれについて助けを求めてどこでも探しました。

私はこれらすべてに不慣れで、それに関するすべてのドキュメントを理解するのが難しいと感じています。

次の XML があるとします。

<footballteams>
  <team manager="Benitez">
    <name>Liverpool</name>
    <ground>Anfield</ground>
  </team>
  <team manager="Mourinho">
    <name>Chelsea</name>
    <ground>Stamford Bridge</ground>
  </team>
  <team manager="Wenger">
    <name>Arsenal</name>
    <ground>Highbury</ground>
  </team>
</footballteams>

これからデータを取得し、footballteams(name,manager,ground) というリレーショナル テーブルにロードします。

私はこれをSQL Server 2008でやりたいと思っています.どこでも読んだことから、これを行うための便利な方法は .nodes() メソッドですが、使い方がわかりません。

4

2 に答える 2

9

次のようなことを試してください:

DECLARE @input XML = '<footballteams>
  <team manager="Benitez">
    <name>Liverpool</name>
    <ground>Anfield</ground>
  </team>
  <team manager="Mourinho">
    <name>Chelsea</name>
    <ground>Stamford Bridge</ground>
  </team>
  <team manager="Wenger">
    <name>Arsenal</name>
    <ground>Highbury</ground>
  </team>
</footballteams>'


SELECT
    TeamName = Foot.value('(name)[1]', 'varchar(100)'),
    Manager = Foot.value('(@manager)', 'varchar(100)'),
    Ground = Foot.value('(ground)[1]', 'varchar(100)')
FROM
    @input.nodes('/footballteams/team') AS Tbl(Foot)

基本的に、.nodes()疑似「テーブル」を作成するための呼び出しは、各XML ノードをその値として含むTbl単一の XML 列で呼び出されます。Foot<team>

次に、その疑似テーブルから選択し、その XML スニペットからXML 属性 ( @manager) と要素 ( name、 ) の個々の値を抽出し、選択した型の T-SQL データ値に変換できます。ground<team>

これらの値をテーブルに挿入するにはINSERT、これに基づいたステートメントを使用するだけです。

;WITH ShreddedData AS
( 
  SELECT
    TeamName = Foot.value('(name)[1]', 'varchar(100)'),
    Manager = Foot.value('(@manager)', 'varchar(100)'),
    Ground = Foot.value('(ground)[1]', 'varchar(100)')
  FROM
    @input.nodes('/footballteams/team') AS Tbl(Foot)
)
INSERT INTO dbo.FootballTeams(Name, Manager, Ground)
   SELECT TeamName, Manager, Ground
   FROM ShreddedData
于 2012-06-24T17:18:45.293 に答える