技术开发 频道

SQL Server 2008中XML的新增功能

XQuery 增强功能

SQL Server 2005 引入了 xml 数据类型,提供了用于对存储在列或变量中的 XML 数据执行操作的大量方法。可执行的大多数操作都使用 XQuery 语法导航和操纵 XML 数据。SQL Server 2005 支持的 XQuery 语法包括 FLWOR 表达式中的 for、where、order by 和 return 语句,这些语句可用于循环访问 XML 文档中的节点,也可用于返回值。

SQL Server 2008 添加了对 let 语句的支持,该语句用于向 XQuery 表达式中的变量赋值,如下面的示例所示:

declare @x xml
set @x=
'<Invoices>
<Invoice>
  <Customer>Kim Abercrombie</Customer>
  <Items>
   <Item ProductID="2" Price="1.99" Quantity="1" />
   <Item ProductID="3" Price="2.99" Quantity="2" />
   <Item ProductID="5" Price="1.99" Quantity="1" />
  </Items>
</Invoice>
<Invoice>
  <Customer>Margaret Smith</Customer>
  <Items>
   <Item ProductID="2" Price="1.99" Quantity="1"/>
  </Items>
</Invoice>
</Invoices>
'
SELECT @x.query(
'<Orders>
{
for $invoice in /Invoices/Invoice
let $count :=count($invoice/Items/Item)
order by $count
return
<Order>
{$invoice/Customer}
<ItemCount>{$count}</ItemCount>
</Order>
}
</Orders>
')


这个例子返回以下 XML。

<Orders>
<Order>
  
<Customer>Margaret Smith</Customer>
  
<ItemCount>1</ItemCount>
</Order>
<Order>
  
<Customer>Kim Abercrombie</Customer>
  
<ItemCount>3</ItemCount>
</Order>
</Orders>


注意,SQL Server 2008 不允许向结构化的元素赋值。

XML DML 增强功能

与使用 XQuery 表达式对 XML 数据执行操作一样,xml 数据类型通过其 modify 方法支持insert、replace value of 和 delete 这些 XML DML 表达式。可以使用这些 XML DML 表达式操纵 xml 列或变量中的 XML 数据。

SQL Server 2008 添加了对使用 insert 表达式中的 xml 变量向现有 XML 结构插入 XML 数据的支持。例如,假定一个名称为 @productList 的 xml 变量包括以下 XML:

<Products>
  
<Bike>Mountain Bike</Bike>
  
<Bike>Road Bike</Bike>
</Products>


可以使用以下代码向产品列表中插入一个新自行车:

DECLARE @newBike xml
SET @newBike = '<Bike>Racing Bike</Bike>'
SET @productList.modify
(
'insert sql:variable("@newBike") as last into (/Products)[1]')


运行这段代码后,@productList 变量中会包括以下 XML。

<Products>
  
<Bike>Mountain Bike</Bike>
  
<Bike>Road Bike</Bike>
  
<Bike>Racing Bike</Bike>
</Products>


结束语
SQL Server 2008 除提供对 SQL Server 2005已有 XML 的全面支持外,还扩展了构建能够合并关系数据和 XML 的强大数据库解决方案的功能。XML 架构支持的改进和 xml 数据类型的增加,对应用程序开发人员具有极大的吸引力。

获取更多信息:
http://www.microsoft.com/sql

本文对您有帮助吗?请告诉我们您的感受。如果从1(差)到5(极好)的分值中进行选择,您认为本文应该打几分?原因是什么?例如:
您是否认为由于提供了很好的例子、精美的屏幕截图、清晰的文字描述或其他原因而应该给它高分?
您是否认为由于用例不当、屏幕截图模糊、文字描述含混不清而应该给它低分?
您的意见有助于我们改善所发布白皮书的质量。提交意见。
 

0
相关文章