【问题标题】:transformation from xml document to relational model with t-sql使用 t-sql 从 xml 文档转换为关系模型
【发布时间】:2012-03-16 19:04:40
【问题描述】:

我需要从我在其他表中的 xml 文档(在关系模型中)插入表数据。我使用的是 sql server 2005。

xml结构示例:

<order id=”123”>
<products>
    <product prodId=”2120”>
        <name>Product1</name>
        <quantity>2</quantity>
    </product>
    <product prodId=”1200”>
        <name>Product2</name>
        <quantity>4</quantity>
    </product>
    <product prodId=”945”>
        <name>Product3</name>
        <quantity>1</quantity>
    </product>
</products>
</order>

...和结果表:

OrderID  ProductID  Name      Quantity
123      2120       Product1  2
123      1200       Product2  4
123      945        Product3  1

我用 openxml 工具解决了这个问题,但它有点慢。 我如何在 XQuery 中做到这一点? 解决此类任务的最佳方法是什么?

【问题讨论】:

  • “打开xml工具”是什么意思?是this OPENXML吗?如果是这样,请添加用于使用 openxml 解决此问题的代码。没有它,就不可能提供执行速度更快的答案。
  • 据我所知,openxml 在粉碎大块 xml 数据方面比 xquery 快得多。所以,你已经在使用最好的方法了。
  • 无论如何,谷歌xml shredding sql-server

标签: sql-server xml sql-server-2005 xquery-sql


【解决方案1】:
DECLARE @xml_str XML =  
   '<order id="123"> <products>
    <product prodId="2120">
        <name>Product1</name>
        <quantity>2</quantity>
    </product>
    <product prodId="1200">
        <name>Product2</name>
        <quantity>4</quantity>
    </product>
    <product prodId="945">
        <name>Product3</name>
        <quantity>1</quantity>
    </product> </products> </order>'

SELECT  
    c.value('(../../@id)', 'int') AS OrderID, 
    c.value('(@prodId)[1]', 'int') AS ProductID,
    c.value('(./name)[1]', 'varchar(20)') AS Name,
    c.value('(./quantity)[1]', 'int') AS Quantity
FROM @xml_str.nodes ('(/order/products/product)') AS t(c)
GO

OrderID     ProductID   Name                 Quantity
----------- ----------- -------------------- -----------
123         2120        Product1             2
123         1200        Product2             4
123         945         Product3             1

(3 row(s) affected)

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多