由于XML本身的诸多优点,XML技术已被广泛的使用,目前的好多软件技术同XML紧密相关,比如微软的。net 平台对xml提供了强大的支持,提供System.Xml以及其子命名空间下的类型来操作xml.Ado.net通过核心类型DataSet出色的把关系型数据库同xml进行了紧密集成。由于平常许多开发人员使用。net 来操作Sql server的到数据集后再转换成xml,所以往往忽略Transact-SQL查询生成XML数据的强大功能。对于一些项目使用XML查询直接通过SQL生成xml会来的更为简便,所以我通过在实际项目中的使用和查阅一些资料,以SQL 2000为例,写成一个知识点,一是温故而知新,二是对于一些开发者刚好需要这方面的技术而还没有找到比较快捷的学习方式提供一条途径。
在SQL SERVER 2000中查询生成XML的语法表达式比较简洁,整个语法如下:
SELECT <;select_list>
FROM <;table_source>
WHERE <;search_condition>
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
|
返回结果:
<;Categories CategoryID="1" CategoryName="Beverages"/>
<;Categories CategoryID="2" CategoryName="Condiments"/>
|
也可以使用别名,
查询语句:
SELECT CategoryID AS ID,
CategoryName,
GetDate() as CurrDate
FROM Categories MyTable
WHERE CategoryID <; 3 FOR XML AUTO
|
返回结果:
<;MyTable ID="1" CategoryName="Beverages" CurrDate="2005-06-24T11:09:52.937"/>
<;MyTable ID="2" CategoryName="Condiments" CurrDate="2005-06-24T11:09:52.937"/>
|
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
|
返回结果:
<;Categories CategoryID="1" CategoryName="Beverages">
<;Products ProductID="1" ProductName="Chai"/>
<;/Categories>
<;Categories CategoryID="2" CategoryName="Condiments">
<;Products ProductID="2" ProductName="Chang"/>
<;/Categories>
|
可以看到表连接查询可以生成分层次的Xml,不过需要注意的是SELECT子句中的父表的列要排在子表的列的前面,否则会出现你不想看到的结果,如:
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一篇:
利用MSSQL sp自制未公开的加密函数 下一篇:
SQL Server Maintenance plan 维护计划
【文章评论】
【收藏本文】
【推荐好友】
【打印本文】
【我要投稿】 【论坛讨论】