SQL Server2005中使用XML-OPENXML

使用open xml将别人的xml数据插入到自己的数据库中

DECLARE @doc xml

SET @doc = '<?xml version="1.0" ?>

<SalesOrder CustomerID="18759" DueDate="2006-01-01T00:00:00"

AccountNumber="10-4030-018759" ContactID="4189" BillToAddressID="14024" ShipToAddressID="14024" ShipMethodID="1" SubTotal="174.20" TaxAmt="10">

            <Item>

                <ProductID>714</ProductID>

                <OrderQty>5</OrderQty>

                <UnitPrice>28.84</UnitPrice>

            </Item>

            <Item>

                <ProductID>715</ProductID>

                <OrderQty>1</OrderQty>

                <UnitPrice>30</UnitPrice>

            </Item>

    </SalesOrder>'

DECLARE @docHandle int

-- 调用系统存储过程以创建内存树
sp_xml_preparedocument解析XML文档,在内存中形成一棵树,将树的根节点指针作为句柄传回;后面的程序,通过句柄进行操作。)

EXEC sp_xml_preparedocument @docHandle OUTPUT, @doc

-----------------------------------------------------------------------------

INSERT [Sales].[SalesOrderHeader]

    ([CustomerID], [DueDate], [AccountNumber], [ContactID], [BillToAddressID],

     [ShipToAddressID], [ShipMethodID], [SubTotal], [TaxAmt])

SELECT * FROM

-- 添加OPENXML 查询(返回一张表)插入数据到SalesOrderHeader 表

OPENXML(@docHandle, '/SalesOrder', 1)

--访问/SalesOrder节点,0代表默认映射(属性),1代表节点的属性,2代表节点的文本,3代表属性和文本

WITH   --定义表的结构

(   CustomerID    int,

    DueDate           datetime,

    AccountNumber nvarchar(15),

    ContactID     int,

    BillToAddressID int,

    ShipToAddressID int,

    ShipMethodID  int,

    SubTotal      money,

    TaxAmt        money)

 

-----------------------------------------------------------------------------

DECLARE @result int

-- 获取SalesOrderHeader插入的特性以使用在SalesOrderDetail插入中

SET @result = SCOPE_IDENTITY()

 

INSERT INTO [Sales].[SalesOrderDetail]

        ([SalesOrderID], [OrderQty], [ProductID], [SpecialOfferID], [UnitPrice])

SELECT @result, [OrderQty], [ProductID], 1, [UnitPrice] FROM

-- 添加OPENXML 查询插入数据到SalesOrderDetail 表

OPENXML(@docHandle, '/SalesOrder/Item', 2)

--访问/SalesOrder/Item节点,1代表节点的属性,2代表节点的文本

WITH

(   OrderQty   int,

    ProductID  int,

    UnitPrice  money)

 

-- 调用存储过程以清除内存树

EXEC sp_xml_removedocument @docHandle

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值