Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1530126
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 19:58:21

一起学习
使用我们刚才创建的虚拟目录,我们就可以通过把SQL查询语句写入URL的方式执行查询。打开浏览器,在地址栏中写入以下URL: * FROM Customers WHERE CustomerID='ANTON' FOR XML AUTO&root=root,如果你使用的虚拟目录别名不是Northwind或者你使用一个远程服务器,只需要把相应的值改掉就可以了。   浏览器中会出现: <?xml version="1.0" encoding="utf-8" ?> <root> <Customers CustomerID="ANTON" CompanyName="Antonio Moreno Taquería" ContactName="Antonio Moreno" ContactTitle="Owner" Address="Mataderos 2312" City="México D.F." PostalCode="05023" Country="Mexico" Phone="(5) 555-3932" /> </root>   让我们来分析一下这个URL,“”后面跟了一个SQL查询语句,用来执行查询数据库Northwind的任务。在本例中,我们使用的查询语句是“SELECT * FROM Customers WHERE CustomerID='ANTON'”。请注意,这条语句已经被URL编码过了,其中的空格都被替换成加号“ ”,这样它才能被浏览器正确的传送到数据库中去,关于URL编码格式请您参阅相关文档。   在查询语句之后,有添加了两个新的关键字:FOR XML和AUTO。FOR XML关键字可以对现有的关系数据库执行 SQL 查询,以返回 XML 文档形式。AUTO模式则将查询结果作为嵌套 XML 元素返回,在 FROM 子句内,每个在 SELECT 子句中至少有一列被列出的表都表示为一个 XML 元素,SELECT 子句中列出的列映射到适当的元素特性,当指定了 ELEMENTS 选项后,表列映射到子元素而非特性。默认情况下,AUTO 模式将表列映射到 XML 特性。   在FOR XML AUTO后,还需要添加一个参数“root”,其参数值作为返回的XML文件的root元素名。比如说,你可以把上面我给出的例子中的root的参数值设为Northwind,你会发现,返回的XML文件中除了root元素名变为Northwind了以外,其它都没有变化。   上面我们说的是直接使用HTTP中执行简单的查询,除此之外你还可以执行更加复杂的查询,比如说连接不同的表进行查询,请看下面的例子,在下例中,SELECT 语句连接了 Northwind 数据库的中的 Customers 和 Orders 表,并返回信息。 Customer.CustomerID,Customer.Contact Name,[Order].OrderID FROM Customers 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,?sql=exec GetXml 'A'&root=root。这样,我们就能够在更高一层次使用存储过程,并且可以根据最终用户想要得到的结果动态的改变参数值(比如在本例中,我们用的是“A”)。 下载本文示例代码


深入探讨SQL Server 2000对XML的支持(二)深入探讨SQL Server 2000对XML的支持(二)深入探讨SQL Server 2000对XML的支持(二)深入探讨SQL Server 2000对XML的支持(二)深入探讨SQL Server 2000对XML的支持(二)深入探讨SQL Server 2000对XML的支持(二)深入探讨SQL Server 2000对XML的支持(二)深入探讨SQL Server 2000对XML的支持(二)深入探讨SQL Server 2000对XML的支持(二)深入探讨SQL Server 2000对XML的支持(二)深入探讨SQL Server 2000对XML的支持(二)深入探讨SQL Server 2000对XML的支持(二)
阅读(139) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~