在SQL Server中如何与XML交互
2008-08-28 09:57:23 来源:WEB开发网输出的结果如下:
<TbUser UserName="admin" />
<TbUser UserName="user" />
语句二:
SELECT 2 as Tag,
NULL as Parent,
User_Name as [TbUser!1!UserName],
User_pwd as [TbUser!2!UserPwd]
FROM Tb_User
FOR XML EXPLICIT
输出的结果如下:
<TbUser UserPwd="admin888" />
<TbUser UserPwd="user" />
在此示例中,列TbUser!1!UserName和TbUser!2!UserPwd 形成一组,然后该组用于构造元素。对于第一行中的 Tag 列值 1和对于 Tag 列值为 2 的行,根据Tag的选择的不同,生成对应表的记录就发生了变化。
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
更多精彩
赞助商链接