1

XML データを SQL Server テーブルにロードしようとしています。

XML ファイルは次のとおりです。

<root>
   <Company ID="183">
      <User UserName="Kim" />
      <User UserName = "Joe" />
   </Company>
 <Company ID="123">
      <User UserName="George" />
      <User UserName = "Sal" />
   </Company>
</root>

会社 ID と UserName の両方を持つ UserName のテーブルを取得したいと思います。この例では:

ID      UserName
---     --------
183     Kim
183     Joe
123     George
123     Sal

各会社のすべてのユーザー名をループするなど、いくつかのことを試しましたが、特にこのソリューションに適したレイヤーが 2 つ以上ある場合、これは非常に複雑です。

私が試した別のことは次のとおりです。

SELECT
t.c.query('./UserName').value('.','varchar(20)') AS A ,
(
    SELECT
    t1.c1.value('@ID', 'varchar(10)')
    FROM @x.nodes('/root/Company')AS t1(c1)
)
FROM @x.nodes('/root/Company/User')AS t(c)

サブクエリに複数の値があるというエラーが表示されます。

助言がありますか?ありがとう!

4

1 に答える 1

1

あなたの言うSQLを仮定しますが、あなたは本当にSQL Serverを意味します-次のようなことを試してください:

DECLARE @input XML = '<root>
   <Company ID="183">
      <User UserName="Kim" />
      <User UserName = "Joe" />
   </Company>
 <Company ID="123">
      <User UserName="George" />
      <User UserName = "Sal" />
   </Company>
</root>'

SELECT
    CompanyID = Comp.value('(@ID)[1]', 'int'),
    UserName = USerTbl.value('(@UserName)[1]', 'varchar(50)')
FROM 
    @input.nodes('/root/Company') T(Comp)
CROSS APPLY
    Comp.nodes('User') AS T2(UserTbl)

これにより、探している出力が得られます。

于 2012-07-12T15:10:43.077 に答える