【问题标题】:Load XML data into SQL Server, special XML structure将 XML 数据加载到 SQL Server,特殊的 XML 结构
【发布时间】:2012-07-12 15:06:51
【问题描述】:

我正在尝试将 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 和用户名的用户名表。 对于这个例子:

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)

但我收到一个错误,即子查询的值超过 1 个。

有什么建议吗? 谢谢!

【问题讨论】:

    标签: sql-server xml xquery bulkinsert


    【解决方案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)
    

    这给了我你正在寻找的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 2021-11-04
      • 2021-12-02
      相关资源
      最近更新 更多