广

MSSQL

  • MYSQL
  • MSSQL
  • Redis
  • MongoDB
  • oracle数据库
  • 数据管理

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

    2018-04-08 09:02:52 次阅读 稿源:互联网
    广告
    全网推广平台,软文发布

      从SQL Server 2000开始,微软开始支持XML类型的数据。在SQL Server2005中,微软延续了这一特性,并加强了对XML 数据列、XML变量以及XML索引的支持。

      在数据库中存储XML数据是一个很出色的特征。对于大部分的数据处理需求来讲,将XML数据格式化为其它关联数据是十分重要。这也是引入OPENXML函数的原因。OPENXML是一个SQL Server提供的函数,它的作用是接收XML数据,提供内存中 XML数据的行集视图。

      一个OPENXML函数用例

      在下面的例子中,我们将演示如何使用OPENXML函数。假定我们现在正在从事一个网上购物系统开发。在这个场景中,顾客选择登录网站方式购买多种产品。因为根据公司的商业模式,通过网站购物能够节省成本。我们假定大部分的顾客都购买了七件或者更多的商品。我们的目标是当客户频繁的访问网站的时候,要尽量减少数据库的调用。我们的想法是将网页上提交的采购需求存储为XML文档,并且将其中的XML数据以字符串的形式传送给数据库底层的程序处理。这样,我们就可以在一次数据库调用中将XML数据中的订单信息插入数据库中。

      我们该如何解决上面的问题呢?首先我们看看将要编辑的网页数据。一个简单的XML文档含有来自网站的很多核心信息,包括:产品名称、价格、日期以及顾客资料。列表A包含了一个简单的XML数据流。

    <ShoppingCart>
    <Purchase ProductID="7" Price="10.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
    <Purchase ProductID="99" Price="25.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
    <Purchase ProductID="32" Price="12.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
    <Purchase ProductID="11" Price="90.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
    <Purchase ProductID="7" Price="50.00" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
    <Purchase ProductID="8" Price="67.35" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
    <Purchase ProductID="45" Price="29.99" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
    <Purchase ProductID="54" Price="49.49" SaleDate="10/11/2006" SaleBatchID = "4523" CustomerID = "2398"/>
    </ShoppingCart>

      列表A

      然后,我们需要设计一个网页接口提供存储程序的调用。通过调用这一存储程序,将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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告
    广告