--
--10.3.1节示例
--
--RAW模式下ELEMENTS支持
USE AdventureWorks;
SELECT TOP 2 at.AddressTypeID,at.Name,ca.CustomerID,ca.AddressID
FROM Person.AddressType at
INNER JOIN Sales.CustomerAddress ca
ON ca.AddressTypeID = at.AddressTypeID
FOR XML RAW,Elements --RAW模式,支持Elements
--FOR XML对空值的处理
SELECT TOP 2 FirstName,MiddleName,LastName
FROM Person.Contact
FOR XML RAW ,ELEMENTS --RAW模式
--添加XSINIL的语句
SELECT TOP 2 FirstName,MiddleName,LastName
FROM Person.Contact
FOR XML RAW ,ELEMENTS XSINIL --增加对NULL元素的处理
--获得XML结果集的XML Schema信息
SELECT TOP 2 FirstName,MiddleName,LastName
FROM Person.Contact
FORXMLRAW,XMLSCHEMA('urn:example') --获得XML架构信息
--TYPE表示返回一个XML数据
USE AdventureWorks;
SELECT at.AddressTypeID,at.Name,(
SELECT ca.CustomerID,ca.AddressID
FROM Sales.CustomerAddress ca
WHERE ca.AddressTypeID = at.AddressTypeID
FORXMLAUTO,TYPE--表明返回的是一个XML数据,而不是一个结果集
)AS XMLCustomerAddress
FROM Person.AddressType at
--使用ROOT语句
SELECT TOP 2 FirstName,MiddleName,LastName
FROM Person.Contact
FORXMLRAW,ROOT(‘Person’) --指定根节点名
--
--10.3.2节示例
--
--使用OPENXML函数
declare @mydoc XML
set @mydoc='
<Person>
<row FirstName="Gustavo" LastName="Achong" />
<row FirstName="Catherine" MiddleName="R." LastName="Abel" />
</Person>
--定义XML文档
declare @docHandle int
Exec sp_XML_preparedocument @docHandle OUTPUT,@mydoc –获得XML的句柄
--获得XML文档的句柄
SELECT *
FROM OPENXML(@docHandle,'/Person/row',1)--1表示以属性为中心
WITH (FirstName nvarchar(50),MiddleName nvarchar(50),LastName nvarchar(50))
--使用OPENXML()查询属性和子元素
declare @mydoc XML
set @mydoc='
<Products>
<Product Category="Book">
<Name>Windows 2008</Name>
<Vendor>Vendor1</Vendor>
</Product>
<Product Category="Book">
<Name>SQL2008</Name>
<Vendor>Vendor2</Vendor>
</Product>
</Products>'
declare @docHandle int
Exec sp_XML_preparedocument @docHandle OUTPUT,@mydoc
--调用系统存储过程获得XML句柄
SELECT *
FROM OPENXML(@docHandle,'/Products/Product',3)
WITH (Category nvarchar(50),Name nvarchar(50),Vendor nvarchar(50))