【问题标题】:Convert XML to SQL Server 2008R2 table [duplicate]将 XML 转换为 SQL Server 2008R2 表 [重复]
【发布时间】:2017-11-10 11:48:12
【问题描述】:

我想将下面的 XML 文件导入 SQL 表。 (SQL Server 2008R2)

<table>
  <id>{72cbb5ab-dbb3-4de7-9010-5dd1192a1851}</id>
  <rows>
    <row>
      <columns>
        <column name="itemcode" value="0984-22-301" type="System.String" />
        <column name="date" value="08-November-2017" type="System.DateTime" />
        <column name="amount" value="10" type="System.Decimal" />
        <column name="DefaultKey" value="1" type="System.Int32" />
      </columns>
    </row>
    <row>
      <columns>
        <column name="itemcode" value="0984-33-101" type="System.String" />
        <column name="date" value="08-November-2017" type="System.DateTime" />
        <column name="amount" value="11" type="System.Decimal" />
        <column name="DefaultKey" value="2" type="System.Int32" />
      </columns>
    </row>
  </rows>
  <key>DefaultKey</key>
  <total>0</total>
  <data />
  <parameters />
</table>

它应该看起来像一个带有列 id、itemcode、date 和 amount 的 sql 表。

我的查询应该是什么样子?

【问题讨论】:

  • 非常感谢。根据那篇文章,我创建了正确的查询来解决我的问题。

标签: sql-server xml


【解决方案1】:

解决了这个问题。

declare @xmltable table (data xml)
insert into @xmltable (data)
select DATA from [MyData]..myxml 


SELECT
    LineId = c.value('id[1]', 'nvarchar(max)'),

    ColumnItemCode = l.value('(columns/column[@name="itemcode"]/@value)[1]', 'varchar(20)'),
    ColumnDate = l.value('(columns/column[@name="date"]/@value)[1]', 'varchar(20)'),
    ColumnAmount = l.value('(columns/column[@name="amount"]/@value)[1]', 'varchar(20)')
FROM
    @xmltable x 
    CROSS APPLY data.nodes('table') t(c)
    CROSS APPLY data.nodes('table/rows/row') b(l)

这导致:

LineId                                  ColumnItemCode  ColumnDate   ColumnAmount
{72cbb5ab-dbb3-4de7-9010-5dd1192a1851}  0984-22-301     08-November-2017    10
{72cbb5ab-dbb3-4de7-9010-5dd1192a1851}  0984-33-101     08-November-2017    11

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 2011-04-28
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多