【问题标题】:How to insert XML to SQL如何将 XML 插入 SQL
【发布时间】:2015-04-27 11:52:55
【问题描述】:

我尝试将 XML 文件添加到 SQL 2008。

我的 XML:

<ItemList>
    <Section Index="0" Name="cat0">
        <Item Index="0" Slot="0" />
        <Item Index="1" Slot="0" />
    </Section>
    <Section Index="1" Name="cat1">
        <Item Index="33" Slot="0" />
        <Item Index="54" Slot="0" />
    </Section>
        <Section Index="2" Name="cat2">
        <Item Index="55" Slot="0" />
        <Item Index="78" Slot="0" />
    </Section>
</ItemList>

SQL 列:

Name = Section Name,
Cat = Section Index,
Index = Item Index,
Slot = Item Slot.

我的例子:

DECLARE @input XML = 'MY XML file'

SELECT
      Name = XCol.value('@Index','varchar(25)'),
      Cat = XCol.value('@Name','varchar(25)'),
      [Index] = 'Unknown', /* Index from <Item>*/
      Slot = 'Unknown' /* Slot from <Item> */
FROM @input.nodes('/ItemList/Section') AS test(XCol)

我不知道如何从“项目”中添加值。

非常感谢!

【问题讨论】:

    标签: sql sql-server xml sql-server-2008


    【解决方案1】:

    你可以这样做:

    select
      Name = XCol.value('../@Index','varchar(25)'),
      Cat = XCol.value('../@Name','varchar(25)'),
      [Index] = XCol.value('@Index','varchar(25)'),
      Slot = XCol.value('@Slot','varchar(25)')
    from
      @input.nodes('/ItemList/Section/Item') AS test(XCol)
    

    关键思想:将数据更深一层,不是/ItemList/Section,而是/ItemList/Section/Item。因此,在这种情况下,您可以访问 Item 的属性,还可以通过指定 ../@Attribute_Name 访问父元素的属性(在您的情况下为 Section

    【讨论】:

      【解决方案2】:

      与上一个答案不同 - 与子项节点交叉应用:

      SELECT
            Name = XCol.value('@Index','varchar(25)'),
            Cat = XCol.value('@Name','varchar(25)'),
            [Index] = XCol2.value('@Index','varchar(25)'),
            Slot = XCol2.value('@Slot','varchar(25)')
      FROM @input.nodes('/ItemList/Section') AS test(XCol)
          CROSS APPLY XCol.nodes('Item') AS test2(XCol2)
      

      【讨论】:

      • 非常感谢!我将了解更多关于 CROSS APPLY 对我来说是新的 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      相关资源
      最近更新 更多