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>
相关文章推荐
- SQL中FOR XML子句的各种用法
- 详解SQL中FOR XML子句的各种用法
- 详解SQL中FOR XML子句的各种用法
- T_SQL的 FOR XML PATH 用法
- SQLServer中sql for xml path 的用法
- sql for xml path用法
- sql for xml path用法
- sql for xml path用法
- sql for xml path用法
- sql for xml path用法 以及sqlserver中实现类似wm_contact效果
- 【转】SQL FOR XML简介及用法
- sql for xml path用法
- sql for xml path用法
- sql for xml path用法 (转载)
- sql for xml path用法 (转载)
- sql for xml path用法
- sql for xml path用法
- sqlserver for xml path用法
- 关于sql for xml path 的用法
- SQL SERVER FOR XML PATH 用法