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

推荐阅读
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社区 版权所有