技术开发 频道

在SQL Server中如何与XML交互

2) 使用OPENXML

   不同于以上,OPENXML主要通过读取XML然后可以转换为数据库的数据。

OPENXML的语法如下:
 

OPENXML( idoc int, rowpattern nvarchar , [ flags byte ] )
[ WITH ( SchemaDeclaration | TableName ) ]

 
   Idoc:XML 文档的内部表式形式的文档句柄。

   Rowpattern:XPath 模式,用来标识要作为行处理的节点。

   Flags:指示应在 XML 数据和关系行集间使用映射以及应如何填充溢出列。

   0 默认为“以属性为中心”的映射。

   1 使用“以属性为中心”的映射。

   2 使用“以元素为中心”的映射。

   8 可与XML_ATTRIBUTES 或 XML_ELEMENTS 组合使用(逻辑或)。

   WITH后面就是对应的字段名及字段对应的属性。

   我们先来看一个微软关于这个调用的实例: 
 

DECLARE @DocHandle int
DECLARE @XmlDocument nvarchar(1000)
SET @XmlDocument = 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>
</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>
</Customer>
</ROOT>'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @DocHandle OUTPUT, @XmlDocument
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@DocHandle, '/ROOT/Customer',1)
WITH (CustomerID varchar(10),
ContactName varchar(20))
EXEC sp_xml_removedocument @DocHandle

 
   运行这个实例,结果如下: 
 

CustomerID ContactName
---------- --------------------
VINET Paul Henriot
LILAS Carlos Gonzlez
0
相关文章