WEB开发网
开发学院数据库MSSQL Server 用OPENXML将XML数据转换为关联数据 阅读

用OPENXML将XML数据转换为关联数据

 2007-05-15 09:31:18 来源:WEB开发网   
核心提示: 然后,我们需要设计一个网页接口提供存储程序的调用,用OPENXML将XML数据转换为关联数据(2),通过调用这一存储程序,将XML数据流存储至数据库,作者简介Tim Chapman先生在一家位于Louisville, KY的银行从事数据库管理员的工作,拥有7年的IT工作经验,列表B是这一存

然后,我们需要设计一个网页接口提供存储程序的调用。通过调用这一存储程序,将XML数据流存储至数据库。列表B是这一存储程序的实现内容。

CREATE PROCEDURE usp_InsertShoppingCartOrder
(
  @xml XML
)
AS
BEGIN
   DECLARE @Pointer INT
   EXECUTE sp_xml_preparedocument @Pointer OUTPUT,@xml
   INSERT INTO WebSales
   (
      ProductID,
      SalePrice,
      SaleDate,
      SaleBatchID,
      CustomerID
   )
   SELECT
      ProductID,
      Price,
      SaleDate,
      SaleBatchID,
      CustomerID
   FROM
   OPENXML (@Pointer,'/ShoppingCart/Purchase')
   WITH
   (
      ProductID INT,
      Price MONEY,
      SaleDate SMALLDATETIME,
      SaleBatchID INT,
      CustomerID INT
   )
   EXEC sp_xml_removedocument @Pointer
END

列表B

这一存储程序支持XML数据类型(SQL Server 2005中新特色)作为输入参数(我们也可以使用变量字符数据类型作为我们的输入参数,例如VARCHAR (max)或者定义VARCHAR数据类型)。

接下来,我们调用系统程序sp_xml_preparedocument,它不仅创建了XML文档在内存中的表示,也允许XML文档作为调用参数。一旦我们拥有了指向内存中XML文档的句柄,就可以调用OPENXML函数。在函数调用中使用不同的参数,还可以对XML数据的返回结果集进行详细的控制。

我们提供指向XML文档的句柄,并且通过XPATH查询返回想要的XML数据中的节点。OPENXML函数中的WITH子句允许指定返回数据的行集格式。一旦将数据插入到websales 表格中,就可以调用系统程序sp_xml_removedocument删除SQL Server 服务器内存中的XML数据。

这个简单的例子演示了通过OPENXML函数来减少数据库调用次数的强大功能。OPENXML函数提供很大的灵活性,你既可以将所有的XML数据插入到SQL Server 数据表中,也可以拆分XML文件,将其插入到不同的SQL Server数据表中。通过这一技术,我们就可以在一次程序调用中插入8条记录,而不是像传统的技术那样,要通过8次操作实现。

OPENXML的局限性

调用OPENXML函数时要注意内存的使用情况。系统程序sp_xml_preparedocument 的返回值是指向内存中XML文档的句柄。所以,你最好不要使用OPENXML加载较大的XML文档,因为那样可能会造成服务器的内存溢出。

在以后的文章中,我将会向你介绍如何使用SQL Server 2005提供的关于XML的一些新属性,这些新属性不仅能够实现OPENXML函数的功能,而且不需要考虑OPENXML调用时产生的内存操作问题。

作者简介

Tim Chapman先生在一家位于Louisville, KY的银行从事数据库管理员的工作,拥有7年的IT工作经验。他还通过了微软的SQL Server 2000和SQL Server 2005认证。

上一页  1 2 

Tags:OPENXML XML 数据

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接