热门标签 | 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功效

推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Echarts图表重复加载、axis重复多次请求问题解决记录
    文章目录1.需求描述2.问题描述正常状态:问题状态:3.解决方法1.需求描述使用Echats实现了一个中国地图:通过选择查询周期&#x ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了在使用MSXML解析XML文件时出现DTD禁用问题的解决方案。通过代码示例和错误信息获取方法,解释了默认情况下DTD是禁用的,以及如何启用DTD的方法。此外,还提到了网上关于该问题的信息相对较少,因此本文提供了解决方案以供参考。 ... [详细]
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社区 版权所有