SQL Server 2000数据库FOR XML查询概述(1)
作者:肯尼思 出处:赛迪网 更新时间:2008-08-07 责任编辑:seward
 
 

         由于XML本身的诸多优点,XML技术已被广泛的使用,目前的好多软件技术同XML紧密相关,比如微软的.net 平台对xml提供了强大的支持,提供System.Xml以及其子命名空间下的类型来操作xml。Ado.net通过核心类型DataSet出色的把关系型数据库同xml进行了紧密集成。由于平常许多开发人员使用.net 来操作SQL Server的到数据集后再转换成xml,所以往往忽略Transact-SQL查询生成XML数据的强大功能。对于一些项目使用XML查询直接通过SQL生成xml会来的更为简便,所以我通过在实际项目中的使用和查阅一些资料写成一个知识点,一是温故而知新,二是对于一些开发者刚好需要这方面的技术而还没有找到比较快捷的学习方式提供一条途径。

 

在SQL SERVER 2000中查询生成XML的语法表达式比较简洁,整个语法如下:

SELECT

FROM

WHERE

FOR XML AUTO | RAW | EXPLICIT [,XMLDATA ] [,ELEMENTS] [,BINARY BASE64]

 

下面我将以Northwind数据库来演示上面的表达式中所包含的各项功能,下面的查询语句和返回结果都通过SQL SERVER 2000查询分析器来执行和得到。

 

一.使用AUTO模式

该模式我认为在生成单表xml数据方面是用得最多的,能满足一般的需要。先来看他的简单查询。

1.简单查询

查询语句:

SELECT CategoryID,

CategoryName

FROM Categories

WHERE CategoryID < 3 FOR XML AUTO

返回结果:

也可以使用别名,

查询语句:

SELECT CategoryID AS ID,

CategoryName,

GetDate() as CurrDate

FROM Categories MyTable

WHERE CategoryID < 3 FOR XML AUTO

返回结果:

2.连接查询

以两个表为例,

查询语句:

SELECT Categories.CategoryID,

Categories.CategoryName,

ProductID,

ProductName

FROM Categories

JOIN Products ON Categories.CategoryID = Products.CategoryID AND ProductID <5

WHERE Categories.CategoryID < 3 FOR XML AUTO

返回结果:

 

 

可以看到表连接查询可以生成分层次的Xml,不过需要注意的是SELECT子句中的父表的列要排在子表的列的前面,否则会出现你不想看到的结果,如:

查询语句:

SELECT ProductID,Categories.CategoryID,Categories.CategoryName,ProductName

FROM Categories

JOIN Products ON Categories.CategoryID = Products.CategoryID and ProductID <5

WHERE Categories.CategoryID <3 FOR XML AUTO

返回结果:

 

 

 

 

3.使用ELEMENTS选项

使用该选项可以生成以元素为中心的Xml表示,默认为属性方式,不过属性方式节省空间。需要注意的是使用ELEMENTS选项是一种全是或全否的形式,不能得到一部分是以元素表示而另一部分以属性表示的Xml数据。

查询语句:

SELECT CategoryID,

CategoryName

FROM Categories

WHERE CategoryID < 3

FOR XML AUTO, ELEMENTS

返回结果:

1

Beverages

 

2

Condiments

 

在连接查询时,

查询语句:

SELECT Categories.CategoryID,

ProductID,

ProductName

FROM Categories

JOIN Products ON Categories.CategoryID = Products.CategoryID and ProductID <4

WHERE Categories.CategoryID <3 FOR XML AUTO, ELEMENTS

返回结果:

1

1

Chai

 

2

Chang

 

 

2

3

Aniseed Syrup

 

 

4.检索对二进制数据的XPath引用

这是对二进制数据的操作,

查询语句:

SELECT CategoryID,

Picture

FROM Categories

WHERE CategoryID = 1

FOR XML AUTO

返回结果:

使用ELEMENTS方式,

查询语句:

SELECT CategoryID,

Picture

FROM Categories

WHERE CategoryID = 1

FOR XML AUTO,ELEMENTS

返回结果:

1

dbobject/Categories[@CategoryID='1']/@Picture

 

 

二.使用RAW模式

使用RAW模式不能使用ELEMENTS选项。

1.简单查询

查询语句:

SELECT CategoryID,

CategoryName AS Nanme

FROM Categories

WHERE CategoryID < 3

ORDER BY CategoryID DESC

FOR XML RAW

返回结果:

2.连接查询

查询语句:

SELECT Categories.CategoryID,

Categories.CategoryName,

ProductID,

ProductName

FROM Categories

JOIN Products ON Categories.CategoryID = Products.CategoryID and ProductID <4

WHERE Categories.CategoryID <= 2 FOR XML RAW

返回结果:

 
     
 
 
继续>>SQL Server
[第1页][第2页][下一页]
 
内容导航  
第1页SQL Server 2000数据库.. 第2页SQL Server
上一篇 : Microsoft SQL Server 2.. 下一篇SQL Server 2000数据库F..
 
  您要为所发表的言论的后果负责,请各位遵纪守法并注意文明用语
标题:  

[ 关于本站 ] [ 广告服务 ] [ 商务合作 ] [ 联系我们 ] [ 合作伙伴 ] [ 法律顾问 ] [ 网站地图 ]
千橡公司 京ICP证041489号 Copyright (c) 1997-2007 All Right Reserved.