sql server 解读xml

DECLARE @idoc int
DECLARE @doc varchar(1000)
set @doc=N'<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
   <Order OrderID="10248" CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
      <OrderDetail ProductID="11" Quantity="12"/>
      <OrderDetail ProductID="42" Quantity="10"/>
   </Order>
   <test>12</test>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
   <Order OrderID="10283" CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
      <OrderDetail ProductID="72" Quantity="3"/>
   </Order>
   <test>333</test>
</Customer>
</ROOT>'
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

SELECT *
FROM   OPENXML (@idoc, '/ROOT/Customer/Order/OrderDetail',2)
         WITH (OrderID       int         '../@OrderID',
               CustomerID  varchar(10) '../@CustomerID',
               OrderDate   datetime    '../@OrderDate',
               ProdID      int         '@ProductID',
               Qty         int         '@Quantity')


SELECT *
FROM   OPENXML (@idoc, '/ROOT/Customer/Order/OrderDetail',1)
         WITH (OrderID       int         '../@OrderID',
               CustomerID  varchar(10) '../@CustomerID',
               OrderDate   datetime    '../@OrderDate',
               ProductID  int   ,     
               Quantity  int     )

SELECT    *
FROM       OPENXML (@idoc, '/ROOT/Customer',2)
            WITH (
				  test varchar(20))


EXEC sp_xml_removedocument @idoc

注:openxml会造成性能损失,建议用自带的函数。

 

 



 openxml:第三个参数:1读属性,2读元素(注:可用@符号进行转换)

posted @ 2020-12-10 15:20  疯狂阿坤  阅读(138)  评论(0编辑  收藏  举报