热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLServer2008中有关XML的新功效

1导言Microsoft在MicrosoftSQLServer2000中推出了与XML相干的功效以及Transact-SQL要害字FORXML和OPENXML,这使得开发职员可以编写Transact-SQL代码来获取XML流情势的查询成果,并将一个XML文档分
1 导言

Microsoft 在Microsoft SQL Server 2000中推出了与XML相干的功效以及Transact-SQL 要害字FOR XML和OPENXML ,这使得开发职员可以编写Transact-SQL代码来获取XML流情势的查询成果,并将一个XML文档分割成一个rowset。SQL Server 2005明显的扩大了这些XML功效,推出了一个支撑XSD schema验证、基于XQuery的把持和XML索引的本地的xml 数据类型。SQL Server 2008建立在之前版本的XML功效基础之上,做了改良来迎接客户在存储和把持数据库中的XML数据时所面临的挑衅。

2 SQL Server XML 功效的发展过程

SQL Server的XML功效随着从SQL Server2000版本以来的每一个版本而不断发展。在我们检查SQL Server 2008中的改良之前,通过之前的版本来总结XML功效的发展过程可能会比拟有用。

2.1 SQL Server 2000中的XML功效

在SQL Server 2000中,Microsoft 推出了Transact-SQL 要害字FOR XML和OPENXML。FOR XML 是对SELECT语句的扩大,它返回如下面的示例所示的XML流式的查询成果。

  SELECTProductID,ProductName
  FROMProductsProduct
  FORXMLAUTO

这个查询返回一个如下面示例所示的XML片段:  



OPENXML 功效履行与FOR XML 条件子句相反的功效,它创立一个XML文档的rowset ,如下面的示例所示:

DECLARE @doc nvarchar(1000)
SET @doc = '
 
 
 
'
DECLARE @xmlDoc integer
EXEC sp_xml_preparedocument @xmlDoc OUTPUT, @doc
SELECT * FROM
OPENXML (@xmlDoc, 'Order/Item', 1)
WITH
(OrderID integer '../@OrderID',
ProductID integer,
Quantity integer)
EXEC sp_xml_removedocument @xmlDoc

留心用sp_xml_preparedocument和sp_xml_removedocument 存储过程来创立XML文档的节点树的一个内存展现的用法。这个Transact-SQL 代码返回下面的rowset。 

OrderID ProductID Quantity 1011 1 2 1011 2 1

2.2 SQL Server 2005中的XML功效

在SQL Server 2005中,FOR XML 功效得到了加强,它有了对根元素和元素名称的新的选项、应用FOR XML 调用以便你可以建立复杂的层次关系的才能、和一个新的使得你可以定义将要应用XPath 语法来提取的XML结构的PATH 模式,如下面的示例所示:

SELECT ProductID AS '@ProductID',
ProductName AS 'ProductName'
FROM Products
FOR XML PATH ('Product'), ROOT ('Products')

这个查询返回下面的XML:



Widget


Sprocket

除了加强SQL Server 2000已推出的XML功效,SQL Server 2005增加了一个新的、本地的xml 数据类型,使得你可认为XML数据创立变量和列,如下面的示例所示:

CREATE XML SCHEMA COLLECTION ProductSchema AS
'

 
'

你可以应用xml 数据类型来存储数据库中的文档或数据。列和变量可以用于非类型化的XML或类型化的XML,后者是对一个XML Schema 定义(XML Schema Definition ,XSD)的schema有效。假如要为数据验证进行定义,开发职员可以应用CREATE XML SCHEMA COLLECTION 语句,如下面的示例所示:

在创立了一个schema 聚集后,你可以通过参照schema聚集将一个xml变量或列与它所包含的schema 声明联合起来,如下面的示例所示:

CREATE TABLE SalesOrders
(OrderID integer PRIMARY KEY,
OrderDate datetime,
CustomerID integer,
OrderNotes xml)

类型化XML在插进值或更新值时对关联的schema 聚集的声明进行验证,这使得可认为了服从性检查或兼容性原因而加强关于XML数据的结构的业务规矩。

xml 数据类型还供给了一些方法,使得你可以应用它们来查询和把持实例的XML数据。例如,你可以应用query 方法来查询xml 数据类型的一个实例的XML数据,如下面的示例所示:

declare @x xml
set @x=
'

 Kim Abercrombie
 
 
 
 
 



 Margaret Smith
 
 
 


'
SELECT @x.query(
'
{
for $invoice in /Invoices/Invoice
return $invoice/Customer
}
')

这个例子中的查询应用了一个XQuery 表达式,这个表达式找出文档中的每一个Invoice 元素,并返回一个包含每一个Invoice 元素的Customer元素的XML文档,如下面的示例所示:


 Kim Abercrombie
 Margaret Smith

SQL Server 2005中的另外一个明显的与XML相干的特征是对XML索引的支撑。你可认为类型化xml的列创立重要和次要的XML索引来加强XML查询性能,一个重要的XML索引是一个XML实例的所有节点的部分表现,查询处理器可以应用它来快速的找到一个XML值中的节点。在你创立了一个重要的XML索引之后,你可以创立次要的XML索引来提高特定的查询类型的性能。下面的示例创立了一个重要的XML索引,和一个PATH类型的次要XML索引,它可以提高应用XPath表达式来标识一个XML实例中的节点的查询的性能。

  CREATEPRIMARYXMLINDEXidx_xml_Notes
  ONSalesOrders(Notes)
  GO
  CREATEXMLINDEXidx_xml_Path_Notes
  ONSalesOrders(Notes)
  USINGXMLINDEXidx_xml_Notes
  FORPATH
  GO

  

2.3 SQL Server 2008中的XML功效

推荐阅读
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 精选30本C# ASP.NET SQL中文PDF电子书合集
    欢迎订阅我们的技术博客,获取更多关于C#、ASP.NET和SQL的最新资讯和资源。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • ISEE获4000万美元B轮融资,助力自动驾驶物流创新
    自动驾驶技术公司ISEE宣布完成4000万美元的B轮融资,由Peter Thiel领投。这笔资金将用于加强其在物流中心自动化运营方面的能力。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • [论文笔记] Crowdsourcing Translation: Professional Quality from Non-Professionals (ACL, 2011)
    Time:4hoursTimespan:Apr15–May3,2012OmarZaidan,ChrisCallison-Burch:CrowdsourcingTra ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
author-avatar
schell
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有