作者:schell | 来源:互联网 | 2014-04-30 14:32
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功效