数据库

 首页 > 数据库 > SqlServer > SQL Server 2008中有关XML的新功效

SQL Server 2008中有关XML的新功效

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

SQL Server 2008中有关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功效 SQL Server 2008中有关XML的新功效

分享到:
解决SQL Server不答应进行远程连接
解决SQL Server不答应进行远程连接 刚刚安装的数据库系统,按照默认安装的话,很可能在进行远程连接时报错,通常是错误:'在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不答应进行远程连接可能会导致此失败。 (provider: 命名管道供给程序, error: 40 - 无法打开到 SQL Server的连接) ',现在针对此...
在SQL Server 2008中应用表值参数(TVP)
在SQL Server 2008中应用表值参数(TVP) 标题:   当我们浏览SQL Server 2008的新特征的时候,我们发明一个很有趣的特征叫做表值参数(Table-Valued Parameter)。你能否给我们具体先容一下我们可以如何利用这个新特征吗?   专家解答:   表值参数确实是SQL Server 2008的一个新特征。顾名思义,表值参数表现你可以把一...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……