2005-09-29

深入探讨SQL Server 2000对XML的支持

来源: 天极中文网 作者:Wayne 评论 0 条
 
Customer INNER JOIN Orders [Order%
5d ON Customer.CustomerID=[Order%
5d.CustomerID FOR XML AUTO&root=Northwind
因为返回的XML文件太长,我就不把它列出来了。

  假如你不想在Customers表和Orders表中出现嵌套的话,SQL Server 2000还提供另一个要害字用来替代AUTO,这个要害字就是RAW。RAW 模式将查询结果集中的每一行转换为带有类属标识符 row 的 XML 元素。为了让您能够深入了解RAW,我再给出一个例子:使用 RAW 模式检索客户和订单信息

  下面的查询返回客户和订单信息。在 FOR XML 子句中指定 RAW 模式。

SELECT Customers.CustomerID, Orders.OrderID, Orders.OrderDate
FROM Customers, Orders
WHERE Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerID
FOR XML RAW

下面是部分结果:

<row CustomerID="ALFKI" OrderID="10643" OrderDate="1997-08-25T00:00:00"/>

<row CustomerID="ANATR" OrderID="10308" OrderDate="1996-09-18T00:00:00"/>

<row CustomerID="ANATR" OrderID="10625" OrderDate="1997-08-08T00:00:00"/>

<row CustomerID="AROUT" OrderID="10355" OrderDate="1996-11-15T00:00:00"/>

可以使用外部联接指定上面的查询在结果集中返回所有客户,无论这些客户是否有订单。
   SELECT C.CustomerID, O.OrderID, O.OrderDate
     FROM Customers C LEFT OUTER JOIN Orders O ON C.CustomerID = O.CustomerID ORDER BY C.CustomerID FOR XML RAW

下面是部分结果:
<row CustomerID="BONAP" OrderID="11076" OrderDate="1998-05-06T00:00:00"/>

<row CustomerID="FISSA"/>

<row CustomerID="PARIS"/>

<row CustomerID="RICSU" OrderID="11075" OrderDate="1998-05-06T00:00:00"/>

我们还可以使用 HTTP 执行存储过程,比如下面这个名为GetXML的存储过程:

  CREATE PROCEDURE GetXml
   (
    @CustomerID varchar(5)
   )
   AS
    BEGIN
     SELECT CustomerID, CompanyName,ContactName
      FROM Customers
      WHERE CustomerID LIKE @CustomerID '%'
      FOR XML AUTO
  END

  为了执行这个存储过程并传送相应的参数,我们可以使用下面这段URL,http://localhost/northwind?sql=exec GetXml 'A'&root=root。这样,我们就能够在更高一层次使用存储过程,并且可以根据最终用户想要得到的结果动态的改变参数值(比如在本例中,我们用的是“A”)。

  三、使用XML模板进行查询


  SQL Server 2000通过在HTTP请求中内嵌SQL语句的功能显然是非常强大并且有用的。但是这种见也隐藏着极大的隐患,一旦某个最终用户了解了直接使用浏览器查询数据库的方法,那么数据库中的数据就很危险了,因为最终用户可能会尝试执行他自己的insert,update甚至是delete过程。

  为了维护大部分数据库中数据交易的安全,使用户不能够直接使用URL进行查询,SQL Server 2000介绍了XML模板的概念,可以设置SQL Server虚拟目录把这些URL查询导向那些含有所需的SQL过程的XML模板中。
共7页: 上一页 [1] [2] 3 [4] [5] [6] [7] 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:SQL Server导出导入数据方法  
下一篇:SQL Server中如何计算农历
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号