SQL Server 2005与XML的紧密整合

王朝mssql·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

FOR XML子句

增强 说明

RAW模式下ELEMENTS RAW查询可以返回以元素为中心的XML结果

NULL值支持 支持null值,可以在一元素为中心的结果中包含空值元素

Inline XSD schemas 可以生成inline XSD架构

TPYE指明返回xml数据类型值 对于FOR XML查询,可以返回xml数据类型的值,使XML嵌套查询成为可能

PATH模式 可以象XPath表达式一样定义XML结果

ROOT标识 为结果集指定根元素

Elements命名 为RAW和PATH模式查询指定命名元素

FOR XML子句范例

1、RAW模式下ELEMENTS

SELECT SaleID,ProductID,Quantity

FROM Sales

FOR XML RAW,ELEMENTS

2、NULL值支持

SELECT SaleID,ProductID,Quantity

FROM Sales

FOR XML RAW,ELEMENTS XSINIL

3、Inline XSD schemas

SELECT ProductID,Name,ListPrice

FROM Production.Product Product

FOR XML AUTO,XMLSCHEMA

4、TPYE指明返回xml数据类型值

SELECT ProductID,Name,ListPrice

(SELECT saleid,ProductID,Quantity

FROM Sales

WHERE Sales.ProductID-Products.ProductID

FOR XML RAW,TYPE)

FROM Products FOR XML AUTO

5、PATH模式

SELECT ProductID AS "@ProductID",

Name AS "Details/@Name",

Description AS "Details/text()"

FROM products FOR XML PATH

6、ROOT标识

SELECT ProductID,Name,ListPrice

FROM Products FOR XML AUTO,ROOT('PRODUCTS')

7、Elements命名

OPENXML函数

增强 描述

文档可以是xml数据类型值 sp_xml_preparedocument存储过程支持xml参数

WITH子句支持XML数据类型 在WITH子句中,XML类型数据能够被返回

Batch-level scoping 文档handle在批级有效,当查询批结束后,文档handle也被释放

OPENXML函数范例

declare @mydoc xml

set @mydoc='

<Products>

<Product Category="Book">

<ID>1</ID>

<Name>Windows 2003</Name>

<Vendor>Vendor1</Vendor>

</Product>

<Product Category="Book">

<ID>2</ID>

<Name>VS.NET2003</Name>

<Vendor>Vendor2</Vendor>

</Product>

</Products>'

declare @docHandle int

Exec sp_xml_preparedocument @docHandle OUTPUT,@mydoc

SELECT * FROM OPENXML(@docHandle,'/Products/Product',2)

WITH (ID int,Name nvarchar(50),Vendor nvarchar(50))

--------------------------

declare @mydoc xml

set @mydoc='

<Products>

<Product Category="Book" ID="1" Name="Windows 2003" />

<Product Category="Book" ID="2" Name="VS.NET 2003" />

</Products>'

declare @docHandle int

Exec sp_xml_preparedocument @docHandle OUTPUT,@mydoc

SELECT * FROM OPENXML(@docHandle,'/Products/Product',1)

WITH (Category nvarchar(50),ID int,Name nvarchar(50))

在数据库中存放XML

优点:

对结构化和非结构化数据实现单一存储

在关系模式中定义可变内容

选择最适合的数据类型

功能:

XML Indexes

基于XQuery的数据检索

基于XQuery的数据修改

XML架构支持:

Typed XML需要架构验证

UnTyped XML需要架构验证

怎样使用Untyped XML

声明xml数据类型

隐式转换字符串

显示转换字符值

使用Convert显示转换字符串

使用well-formed XML

Untyped XML范例

1、声明xml数据类型

CREATE TABLE Invoices

(

InvoiceID INT,

SalesDate DateTime,

CustomerID INT,

ItemList XML

)

DECLARE @itemDoc xml

2、隐式转换字符串值

SET @itemDoc = '<Items>etc.</Items>'

3、显示转换字符串

SET @itemDoc = CAST('<Items>etc.</Items>') AS XML

4、显示CONVERT显示转换字符串

SET @itemDoc = CONVERT(xml,'<Items>etc.</Items>')

5、使用well-formed XML

SET @itemDoc = CONVERT(XML,'<items>etc.')

ERROR!

怎样管理XML架构

1、建立XML架构集合

CREATE XML SCHEMA COLLECTION SalesSchema

AS

'<?xml version="1.0" standalone="yes"?>

<xs:schema id="Sales" xmlns="http://www.gocean.com.cn" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">

<xs:element name="Sales" msdata:IsDataSet="true" msdata:Locale="zh-CN">

<xs:complexType>

<xs:choice minOccurs="0" maxOccurs="unbounded">

<xs:element name="Product">

<xs:complexType>

<xs:sequence>

<xs:element name="ID" type="xs:int" minOccurs="0" />

<xs:element name="Name" type="xs:string" minOccurs="0" />

<xs:element name="Qty" type="xs:int" minOccurs="0" />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:choice>

</xs:complexType>

</xs:element>

</xs:schema>

'

2、查看schema信息

SELECT * FROM sys.xml_schema_collections

SELECT * FROM sys.xml_namespaces

3、修改schema集合

ALTER XML SCHMEMA COLLECTION cvSchemas

4、删除schema集合

DROP XML SCHMEMA COLLECTION cvSchemas

怎样使用Typed XML

1、声明typed列或变量

CREATE TABLE HumanResources.EmployeeResume

(

Emplyee INT,

Resume XML (cvSchemas)

[1] [2] [3] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航