• --:)欢迎访问锋网源码(:--
  • 首页
  • RSS订阅
  • 常用软件
  • 网页模板
  • 网站运作
  • 锋网学院
  • 繁體中文

  • 学院首页
  • 新闻资讯
  • 网站运营
  • 网站开发
  • 美工设计
  • 数据库类
  • 服务器类
  • 网络应用
  • 操作系统
  • 软件教学
编程开发   认证考试   网络安全   文章搜索: 高级搜索
会员登录/控制面版 您的位置: 学院首页 >> 数据库类 >> 文章内容
 

精彩推荐

 
 

本类推荐文章

  • ACCESS集锦
 
 

本类阅读排行

  • 用SQL实现分布式数据复制
  • 数据库聊天室的“无刷新”技..
  • SQL语言快速入门之一 &..
  • 用Access 2000进行班级管理
  • Delphi中的Access技巧集
  • 浅谈ACCESS数据库升迁SQLSER..
  • 如何更改Access默认的中文输..
  • SQL Server 连接基础知识
  • 检查sql字符串中是否有单引号..
  • 基于WEB的数据库查询
  • ORACLE学习笔记--性能优化
  • ACCESS集锦
  • 能否编译mdb文件到exe文件?
  • ado如何使用sql函数?
  • 建立Access 数据库的安全门
  • Oracle数据库维护常用SQL语句..
  • Oracle数据库维护常用SQL语句..
  • 在 Access 中使用“存储过程..
  • Access 的最大容量
  • Vista下安装SQL Server 2005..
 
 

SQL Server 2005 FOR XML嵌套查询使用详解

  • 日期:2008-07-17     人气:     出处:     作者:
  • 字体大小:
  • 小
  • 中
  • 大

相比SQL Server 2000提供的FOR XML查询,SQL Server 2005版本对现有功能增强的基础上增加了不少新功能,最为吸引人的功能包括对Xml数据类型支持、使用PATH模式以及嵌套FOR XML查询支持等,这意味着通过新的FOR XML查询功能可以构造出结构更加灵活的Xml数据。

在SQL Server 2000中FOR XML查询的结果是直接以文本方式返回到客户端,为支持SQL Server 2005中的Xml数据类型,FOR XML 查询提供了TYPE指令,通过TYPE支持返回结果将会变为Xml数据类型。接下来以SQL Server2005中的AdventureWorks示例数据库为例演练其功能。

先来看第一个SQL查询:

DECLARE @TestStringValue nvarchar(1024);

SET @TestStringValue = (SELECT ProductID,[Name] FROM Production.Product

WHERE ProductSubcategoryID = 9

FOR XML AUTO);

SELECT @TestStringValue;


输出结果:

 

结果为字符串,只是内容格式符合Xml片段要求,不过无法在SQL Server Management Studio中点击以Xml方式显示。

下面对SQL进行修改,增加TYPE指令:

DECLARE @TestStringValue nvarchar(1024);

SET @TestStringValue = (SELECT ProductID,[Name] FROM Production.Product

WHERE ProductSubcategoryID = 9

FOR XML AUTO,TYPE);


不出意外,查询结果收到如下错误提示:

不允许从数据类型xml 到nvarchar 的隐式转换。请使用CONVERT 函数来运行此查询。

可见通过TYPE指令返回的数据已经转变成Xml类型,改进后的查询语句如下:

DECLARE @XmlTestValue xml;

SET @XmlTestValue = (SELECT ProductID,[Name] FROM Production.Product

WHERE ProductSubcategoryID = 9

FOR XML AUTO,TYPE);

SELECT @XmlTestValue;


通过SELECT 返回的结果支持Xml方式显示。


了解了TYPE指令的功能后,就可以来看FOR XML查询带给开发者的更多惊喜。以示例数据库的产品表(Production.Product)和产品分类子类表(Production.ProductSubcategory)为例进行演示。

编写产品子类别为“9”的产品数据查询:

SELECT ProductSubcategoryID,[Name] ,

(SELECT ProductID,[Name] FROM Production.Product Product

WHERE ProductSubcategoryID = 9

FOR XML AUTO,TYPE) AS Products

FROM Production.ProductSubcategory AS Category

WHERE ProductSubcategoryID = 9

FOR XML AUTO;


输出结果如下:

 

 

 


如果在产品查询子句中不提供TYPE指令,那么输出就会变成下面结果:

" />

 

以上几个查询结果都没有带命名空间,不过SQL Server 2005 通过WITH XMLNAMESPACES子句提供了对命名空间的支持,下面的查询将显示一个完整的带默认命名空间的Xml文档。

WITH XMLNAMESPACES ('uri0' as ns0)

SELECT ProductSubcategoryID,[Name] ,

(SELECT ProductID,[Name] FROM Production.Product Product

WHERE ProductSubcategoryID = 9

FOR XML RAW('ns0:Product'),TYPE) AS 'ns0:Products'

FROM Production.ProductSubcategory AS Category

WHERE ProductSubcategoryID = 9

FOR XML RAW('ns0:Category'),ROOT('ns0:Message');


输出结果:

 

 

 

 

 

如果采用默认命名空间,编写SQL如下:

WITH XMLNAMESPACES (DEFAULT 'http://blog.csdn.net/zhzuo')

SELECT ProductSubcategoryID,[Name] ,

(SELECT ProductID,[Name] FROM Production.Product Product

WHERE ProductSubcategoryID = 9

FOR XML AUTO,TYPE) AS Products

FROM Production.ProductSubcategory AS Category

WHERE ProductSubcategoryID = 9

FOR XML AUTO,ROOT('Message');


输出结果:

 

 

 

 

 

另外,在SQL Server 2005中增加了FOR XML PATH 模式,通过使用FOR XML PATH 模式可以建立清晰灵活的Xml格式,相比使用FOR XML EXPLICIT更为简单:

WITH XMLNAMESPACES (DEFAULT 'http://blog.csdn.net/zhzuo')

SELECT ProductID AS 'Product/@ProductID',

Name AS 'Product/Name'

FROM Production.Product

WHERE ProductSubcategoryID = 9

FOR XML PATH(''),ROOT('Products');


输出结果:

 

Rear Derailleur

 

Front Derailleur

 

 

在实际应用过程中,以.NET平台应用开发为例,通过ADO.NET访问SQL Server 2005返回的Xml数据结构可以更加丰富,甚至可以做到不做Xml样式转换直接服务于上一层模块。在企业应用集成方面,以BizTalk平台为例,在调用SQL Adapter的时候可以更加灵活,降低为了制定合理Xml Schema带来的复杂性。目前,最新版本的BizTalk(2006 R2)对使用了SQL Server 2005加强FOR XML功能的存储过程或SQL语句不支持通过SQL适配器向导生成XML Schema,不过这个问题可以直接通过Visual Studio IDE编写符合实际格式的XML Schema来解决。
 

相关文章
  • ASP.net Server Application Unavailable
  • Windows Server 2008 DNS服务器新增功能
  • SQL Server 2008十月正式上市
  • Windows Server 2008 :IIS 7 Web服务器管理
  • Windows Server 2008登陆Dreamspark 免费使用
  • 关于Windows Server 2008的10件事
  • SQL Server 2008实现高可用性
  • Windows Server 2008之可移动存储访问组策略设置
  • Windows Server 2008之IIS 7中设置 FTP(1)
  • 揭秘 Windows Server 2008 新功能
相关软件

  • 网友评论:
  • 查看所有评论
  • 我要发表评论
 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 加入收藏 | 帮助中心 |

Copyright © 2006-2007 fwvv.net  程序支持:木翼  皖ICP备06004916号