您的位置:首页 > 数据库

SQL中FOR XML子句的各种用法

2009-05-10 23:34 281 查看




FORXML子句有四种最基本的模式,如上图所示:

1、AUTO模式:返回数据表为起表名的元素,每一列的值返回为属性;
2、RAW模式:返回数据行为<Row>元素,每一列的值作为<Row>元素的属性;
3、PATH模式:通过简单的XPath语法来允许用户自定义嵌套的XML结构、元素、属性值
4、EXPLICIT模式:通过SELECT语法定义输出XML的结构

具体实例如下:

1、AUTO模式

(1).SQL语句:

1:SELECTEmployeeID,FirstName,LastNameFROMEmployeesFORXMLAUTO,XMLSCHEMA

(2).所生成的XML文件:

返回XML文件的XMLSchema

<xsd:schematargetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet1"xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet1"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes"elementFormDefault="qualified">
<xsd:importnamespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes"schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd"/>
<xsd:elementname="Employees">
<xsd:complexType>
<xsd:attributename="EmployeeID"type="sqltypes:int"use="required"/>
<xsd:attributename="FirstName"use="required">
<xsd:simpleType>
<xsd:restrictionbase="sqltypes:nvarchar"sqltypes:localeId="1033"sqltypes:sqlCompareOptions="IgnoreCaseIgnoreKanaTypeIgnoreWidth"sqltypes:sqlSortId="52">
<xsd:maxLengthvalue="10"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attributename="LastName"use="required">
<xsd:simpleType>
<xsd:restrictionbase="sqltypes:nvarchar"sqltypes:localeId="1033"sqltypes:sqlCompareOptions="IgnoreCaseIgnoreKanaTypeIgnoreWidth"sqltypes:sqlSortId="52">
<xsd:maxLengthvalue="20"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<Employeesxmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"EmployeeID="1"FirstName="Nancy"LastName="Davolio"/>
<Employeesxmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"EmployeeID="2"FirstName="Andrew"LastName="Fuller"/>
<Employeesxmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"EmployeeID="3"FirstName="Janet"LastName="Leverling"/>
<Employeesxmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"EmployeeID="4"FirstName="Margaret"LastName="Peacock"/>
<Employeesxmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"EmployeeID="5"FirstName="Steven"LastName="Buchanan"/>
<Employeesxmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"EmployeeID="6"FirstName="Michael"LastName="Suyama"/>
<Employeesxmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"EmployeeID="7"FirstName="Robert"LastName="King"/>
<Employeesxmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"EmployeeID="8"FirstName="Laura"LastName="Callahan"/>
<Employeesxmlns="urn:schemas-microsoft-com:sql:SqlRowSet1"EmployeeID="9"FirstName="Anne"LastName="Dodsworth"/>

2、RAW模式

(1).SQL语句:

1:----将元素命名为自定义的名称Employee

2:SELECTEmployeeID,FirstName,LastNameFROMEmployeesFORXMLRAW('Employee')


(2).所生成的XML文件:

1:<EmployeeEmployeeID="1"FirstName="Nancy"LastName="Davolio"/>

2:<EmployeeEmployeeID="2"FirstName="Andrew"LastName="Fuller"/>

3:<EmployeeEmployeeID="3"FirstName="Janet"LastName="Leverling"/>

4:<EmployeeEmployeeID="4"FirstName="Margaret"LastName="Peacock"/>

5:<EmployeeEmployeeID="5"FirstName="Steven"LastName="Buchanan"/>

6:<EmployeeEmployeeID="6"FirstName="Michael"LastName="Suyama"/>

7:<EmployeeEmployeeID="7"FirstName="Robert"LastName="King"/>

8:<EmployeeEmployeeID="8"FirstName="Laura"LastName="Callahan"/>

9:<EmployeeEmployeeID="9"FirstName="Anne"LastName="Dodsworth"/>

3、PATH模式:

(1).SQL语句:

SELECTEmployeeID"@ID",FirstName"Name/FirstName",LastName"Name/LastName"

FROMEmployeesFORXMLPATH('Employee')

(2).所生成的XML文件

<EmployeeID="1">
<Name>
<FirstName>Nancy</FirstName>
<LastName>Davolio</LastName>
</Name>
</Employee>
<EmployeeID="2">
<Name>
<FirstName>Andrew</FirstName>
<LastName>Fuller</LastName>
</Name>
</Employee>
<EmployeeID="3">
<Name>
<FirstName>Janet</FirstName>
<LastName>Leverling</LastName>
</Name>
</Employee>
<EmployeeID="4">
<Name>
<FirstName>Margaret</FirstName>
<LastName>Peacock</LastName>
</Name>
</Employee>
<EmployeeID="5">
<Name>
<FirstName>Steven</FirstName>
<LastName>Buchanan</LastName>
</Name>
</Employee>
<EmployeeID="6">
<Name>
<FirstName>Michael</FirstName>
<LastName>Suyama</LastName>
</Name>
</Employee>
<EmployeeID="7">
<Name>
<FirstName>Robert</FirstName>
<LastName>King</LastName>
</Name>
</Employee>
<EmployeeID="8">
<Name>
<FirstName>Laura</FirstName>
<LastName>Callahan</LastName>
</Name>
</Employee>

4、EXPLICIT模式

问题:加入要生成如下的XML文档该如何操作?

<EmployeeEmpID="1">

<FirstName>Nancy</FirstName>

<LastName>Davolio</LastName>

</Employee>


EXPLICIT模式解决这个问题的应用分为两个主要步骤:

1.定义要输出的XML文档结构;

2.传入实际的数据值;

(1).SQL语句:


--定义输出XML文档的数据结构

SELECT1ASTag,

NULLASParent,

EmployeeIDAS[Employee!1!EmpID],

FirstNameAS[Employee!1!FirstName!element],

LastNameAS[Employee!1!LastName!element]

FROMEmployees


UNIONALL

--传入实际的数据

SELECT1,

NULL,

EmployeeID,

FirstName,

LastName

FROMEmployees

ORDERBY[Employee!1!EmpID],

[Employee!1!FirstName!element],

[Employee!1!LastName!element]

FORXMLEXPLICIT

语句含义的解释:

先看看定义XML结构的语句输出结果:





Tag栏用来指定生成元素的嵌套水平;1表示嵌套水平为

Parent栏用来指定当前Tag的父级层次;Null值表示该元素为顶级元素;

EmployeeIDAS[Employee!1!EmpID],

说明:当前元素或属性的父级元素的名称!元素的标签号!元素或属性的名称
FirstNameAS[Employee!1!FirstName!element],

说明:当前元素或属性的父级元素的名称!元素的标签号!元素或属性的名称!指定值作为元素输出

5、为输出的XML文档添加根元素(Rootelement)

(1).SQL语句:

SELECTEmployeeID,FirstName,LastNameFROMEmployeesFORXMLAUTO,ROOT('MyRoot')

(2).所生成的XML文件

<MyRoot>
<EmployeesEmployeeID="1"FirstName="Nancy"LastName="Davolio"/>
<EmployeesEmployeeID="2"FirstName="Andrew"LastName="Fuller"/>
<EmployeesEmployeeID="3"FirstName="Janet"LastName="Leverling"/>
<EmployeesEmployeeID="4"FirstName="Margaret"LastName="Peacock"/>
<EmployeesEmployeeID="5"FirstName="Steven"LastName="Buchanan"/>
<EmployeesEmployeeID="6"FirstName="Michael"LastName="Suyama"/>
<EmployeesEmployeeID="7"FirstName="Robert"LastName="King"/>
<EmployeesEmployeeID="8"FirstName="Laura"LastName="Callahan"/>
<EmployeesEmployeeID="9"FirstName="Anne"LastName="Dodsworth"/>
</MyRoot>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: