SQL Server 2000提供了一些XML功能,用于通过XML将关系行集合转换成分层的XML文档、读取XML文档和批量加载数据。例如,可以将XML文档传递到存储过程,将XML联接到某些表并返回一个行集合,甚至可以在数据库中修改数据。XML在当今企业系统中不断扩展的功能促进了OPENXML函数和FOR XML语句的引入。其中某些功能不但支持XML,而且还提高批量加载数据时的性能。
在本文中我们将讨论如何通过T-SQL的FOR XML子句从SQL Server返回XML。本文将通过几个例子来介绍返回XML数据和架构信息的几种不同方式,还将介绍将XML转换成更令人满意的格式的方法。然后讨论OPENXML,以及将XML文档联接到数据库表和使用WriteXml和GetXml方法从数据集提取XML的方法。这些例子的SQL,以及执行其中某些例子并将它们导出为文本文件的示例ASP.NET 项目,都可从MSDN Magazine Web站点下载。该示例项目中还包含了用于从XML将记录插入和更新到数据库的代码。
返回XML
当用于SELECT语句中时,FOR XML子句指示SQL Server将数据作为XML返回,这与标准行集合相反。可以指定返回模式:RAW、AUTO或EXPLICIT。每种模式都提供了XML的不同转换方式(图 1 给出了各种模式的概述)。
图 1 FOR XML模式概述
| 模式 | 说明 |
| RAW | 行集合的每个记录都转换成叫做行的XML元素。<row>元素将包含一个属性,用来表示所检索的列。 |
| AUTO | 行集合记录可以转换成以FROM子句中的表命名的嵌套XML元素。所检索每一列都将表示为一个属性 |
| EXPLICIT | 为格式化XML提供许多控制。不过,EXPLICIT模式的使用语法要复杂得多。XSLT是一个比较常用的XML转换方法。 |
例如,若使用FOR XML RAW来查询Northwind数据库的Employees表,它会在<row>元素中返回每个员工行。SELECT语句中包含的每一列都会表示为<row>元素的一个属性。下面的FOR XML RAW查询选择两个员工记录,然后以RAW格式返回:
|
对该SELECT语句作一下修改就可以使用FOR XML AUTO子句。这次将元素命名为Employees,与源表的名称匹配。列仍是主元素的属性:
|
转换和层次结构
尽管上例中的区别较小,但与用于联接表的一个查询一起使用时,AUTO和RAW之间的区别比较明显。无论数据是来自一个表还是来自多个表,使用FOR XML RAW的查询都将只返回<row>元素。因此,RAW模式不利用XML文档的固有分层结构。请看下面的SQL语句:
|
本例将检索一种一对多父子关系。若执行该SQL语句,则将返回一系列客户及其相应定单。若附带FOR XML RAW子句并再次执行,则得出的XML结果将包含一个表示所返回的每一行的单<row>元素。例如,图 2中的XML数据表示CustomerID为ALFKI时FOR XML RAW将返回的行。
|
图 2 XML数据
| 共5页: 1 [2] [3] [4] [5] 下一页 | ||
|
| 关于 SQL Server XML 的 |
|
||||
| · NAC安全访问控制 · 网络布线测试仪器 · Windows Server 2008专.. · Windows远程桌面应用 · 网络故障排除宝典 · 运营商封堵ADSL共享 中.. · 解析35岁技术人的价值.. · 世纪枭雄比尔盖茨的王.. |
· 主流品牌防火墙配置 · ASP.NET开发教程 · 超级计算机TOP500专题 · Vista SP1对决XP SP3 · SQL Server 2008/2005.. · 程序员如何成长? · C#技术开发指南 · 虚拟化技术还有点“虚” |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Windows远程桌面应用 · C#技术开发指南 · Apache技术专题 |
· Windows集群服务应用 · C#技术开发指南 · 国际文档格式标准开战 · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 |
|||