分享
 
 
 

使用Microsoft SQL Server 2000的XML查询

王朝mssql·作者佚名  2008-05-30
窄屏简体版  字體: |||超大  

由于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 <;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子句中的父表的列要排在子表的列的前面,否则会出现你不想看到的结果,如:

查询语句:

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

FROM Categories

JOIN Products ON Categories.CategoryID = Products.CategoryIDand ProductID <;5

WHERE Categories.CategoryID <;3FOR XML AUTO

返回结果:

<;Products ProductID="1" ProductName="Chai">

<;Categories CategoryID="1" CategoryName="Beverages"/>

<;/Products>

<;Products ProductID="2" ProductName="Chang">

<;Categories CategoryID="1" CategoryName="Beverages"/>

<;/Products>

<;Products ProductID="3" ProductName="Aniseed Syrup">

<;Categories CategoryID="2" CategoryName="Condiments"/>

<;/Products>

<;Products ProductID="4" ProductName="Chef Anton&apos;s Cajun Seasoning">

<;Categories CategoryID="2" CategoryName="Condiments"/>

<;/Products>

3.使用ELEMENTS选项

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

查询语句:

SELECT CategoryID,

CategoryName

FROM Categories

WHERE CategoryID <; 3

FOR XML AUTO, ELEMENTS

返回结果:

<;Categories>

<;CategoryID>1<;/CategoryID>

<;CategoryName>Beverages<;/CategoryName>

<;/Categories>

<;Categories>

<;CategoryID>2<;/CategoryID>

<;CategoryName>Condiments<;/CategoryName>

<;/Categories>

在连接查询时,

查询语句:

SELECT Categories.CategoryID,

ProductID,

ProductName

FROM Categories

JOIN Products ON Categories.CategoryID = Products.CategoryIDand ProductID <;4

WHERE Categories.CategoryID <;3FOR XML AUTO, ELEMENTS

返回结果:

<;Categories>

<;CategoryID>1<;/CategoryID>

<;Products>

<;ProductID>1<;/ProductID>

<;ProductName>Chai<;/ProductName>

<;/Products>

<;Products>

<;ProductID>2<;/ProductID>

<;ProductName>Chang<;/ProductName>

<;/Products>

<;/Categories>

<;Categories>

<;CategoryID>2<;/CategoryID>

<;Products>

<;ProductID>3<;/ProductID>

<;ProductName>Aniseed Syrup<;/ProductName>

<;/Products>

<;/Categories>

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

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

查询语句:

SELECT CategoryID,

Picture

FROM Categories

WHERE CategoryID = 1

FOR XML AUTO

返回结果:

<;Categories CategoryID="1" Picture="dbobject/Categories[@CategoryID='1']/@Picture"/>

使用ELEMENTS方式,

查询语句:

SELECT CategoryID,

Picture

FROM Categories

WHERE CategoryID = 1

FOR XML AUTO,ELEMENTS

返回结果:

<;Categories>

<;CategoryID>1<;/CategoryID>

<;Picture>dbobject/Categories[@CategoryID='1']/@Picture<;/Picture>

<;/Categories>

二。使用RAW模式

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

1.简单查询

查询语句:

SELECT CategoryID,

CategoryName AS Nanme

FROM Categories

WHERE CategoryID <; 3

ORDER BY CategoryID DESC

FOR XML RAW

返回结果:

<;row CategoryID="2" Nanme="Condiments"/>

<;row CategoryID="1" Nanme="Beverages"/>

2.连接查询

查询语句:

SELECT Categories.CategoryID,

Categories.CategoryName,

ProductID,

ProductName

FROM Categories

JOIN Products ON Categories.CategoryID = Products.CategoryIDand ProductID <;4

WHERE Categories.CategoryID <;= 2FOR XML RAW

返回结果:

<;row CategoryID="1" CategoryName="Beverages" ProductID="1" ProductName="Chai"/>

<;row CategoryID="1" CategoryName="Beverages" ProductID="2" ProductName="Chang"/>

<;row CategoryID="2" CategoryName="Condiments" ProductID="3" ProductName="Aniseed Syrup"/>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有