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

3.使用EXPLICIT模式查询中的指令

这些指令是指通用表列的第四部分,通过它对数据进行进一步控制。

1> 最常用的element和xml指令

通过该指令把列的数据显示为一个子元素而不是属性。

查询语句:

SELECT 1 AS Tag,NULL AS Parent,

CategoryID AS [Category!1!ID],

CategoryName [Category!1!Name],

Description [Category!1!!element]

FROM Categories

WHERE categoryID > 6 FOR XML EXPLICIT

返回结果:

Dried fruit and bean curd

Seaweed and fish

查询语句:

SELECT 1 AS Tag,NULL AS Parent,

CategoryID AS [Category!1!ID],

CategoryName [Category!1!Name],

Description [Category!1!Description!element]

FROM Categories

WHERE categoryID > 6 FOR XML EXPLICIT

返回结果:

Dried fruit and bean curd

 

Seaweed and fish

查询语句:

SELECT 1 AS Tag,NULL AS Parent,

CategoryID AS [Category!1!ID],

CategoryName [Category!1],

Description [Category!1!Description!element]

FROM Categories

WHERE categoryID > 6 FOR XML EXPLICIT

返回结果:

Produce

Dried fruit and bean curd

 

Seafood

Seaweed and fish

 

xml指令同element指令差不多,只是element指令会将一些xml下面的符号进行编码,如>被编码成>5,而xml指令不会。

2> 使用hide指令

该指令是用来处理那些不想返回结果的列,许多人会有疑问觉得没有必要,只要在列中不增加就行了,条件和排序也可以直接使用列。我们可以想得到使用UNION ALL时就用得上了,看下面的例子。

查询语句:

SELECT 1 AS Tag,NULL AS Parent,

CategoryID AS [Category!1!ID!hide],

CategoryName AS [Category!1!Name],

NULL AS [Product!2!ProductID!element],

NULL AS [Product!2!ProductName!element]

FROM Categories WHERE CategoryID < 3

UNION ALL

SELECT 2 ,1 ,

Categories.CategoryID,

NULL,

ProductID,

ProductName

FROM Categories

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

WHERE Categories.CategoryID < 3

ORDER BY [Category!1!ID!hide] DESC,[Product!2!ProductID!element] ASC

FOR XML EXPLICIT

返回结果:

3

Aniseed Syrup

 

4

Chef Anton&apos;s Cajun Seasoning

 

 

1

Chai

 

2

Chang

 

 

3> 使用xmltext指令

该指令是用来处理包含xml片断内容的数据列,没找到现成的表结构和数据进行测试,所以就在Categories表中增加了XmlData列名,类型为nvarchar,默认值设置为“”。

查询语句:

SELECT 1 AS Tag,NULL AS Parent,

CategoryID AS [Category!1!ID],

XmlData AS [Category!1!CustomData!xmltext]

FROM Categories WHERE CategoryID = 8 FOR XML EXPLICIT

返回结果:

查询语句:

SELECT 1 AS Tag,NULL AS Parent,

CategoryID AS [Category!1!ID],

XmlData AS [Category!1!!xmltext]

FROM Categories WHERE categoryID = 8 FOR XML EXPLICIT

返回结果:

4> 使用cdata指令

使用该指令可以创建CDATA节防止一些字符数据被xml解析器。

查询语句:

SELECT 1 AS Tag,NULL AS Parent,

CategoryID AS [Category!1!ID],

XmlData AS [Category!1!!cdata]

FROM Categories WHERE categoryID = 6 FOR XML EXPLICIT

返回结果:

]]>

5> 使用ID、IDREF和IDREFS指令以及XMLDATA选项

由于这里只能返回XDR构架,不支持XSD架构的检索,我就只给出一个例子,

查询语句:

SELECT 1 AS Tag,NULL AS Parent,

CategoryID AS [Category!1!ID!ID],

CategoryName AS [Category!1!Name],

NULL AS [Product!2!ProductID!IDREF],

NULL AS [Product!2!ProductName]

FROM Categories WHERE CategoryID < 3

UNION ALL

SELECT 2 ,1 ,

Categories.CategoryID,

NULL,

ProductID,

ProductName

FROM Categories

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

WHERE Categories.CategoryID < 3

ORDER BY [Category!1!ID!ID] ,[Product!2!ProductID!IDREF]

FOR XML EXPLICIT,XMLDATA

返回结果:

 

 

 

 

 

 

四.使用BINARY BASE64 选项

使用该选项可以检索二进制字段,比如图像数据以base64的形式返回到xml文档。

1.使用RAW方式

查询语句:

SELECT CategoryID,

Picture

FROM Categories

WHERE CategoryID =1

ORDER BY CategoryID DESC

FOR XML RAW,BINARY BASE64

返回结果:

2.使用AUTO方式

查询语句:

SELECT CategoryID,

Picture

FROM Categories

WHERE CategoryID =2

ORDER BY CategoryID DESC

FOR XML AUTO,BINARY BASE64

返回结果:

查询语句:

SELECT CategoryID,

Picture

FROM Categories

WHERE CategoryID =1

ORDER BY CategoryID DESC

FOR XML AUTO,ELEMENTS,BINARY BASE64

返回结果:

1

FRwvAAIAAAANAA4AFAAhAP////9CaXRt...

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

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