sql for xml

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

1、auto模式:返回数据表为起表名的元素,每一列的值返回为属性;
2、raw模式:返回数据行为<row>元素,每一列的值作为<row>元素的属性;
3、path模式:通过简单的xpath语法来答应用户自定义嵌套的xml结构、元素、属性值
4、explicit模式:通过select语法定义输出xml的结构

 

具体实例如下:

1、auto模式

(1). sql语句:

   1:  select employeeid,firstname,lastname from employees for xml auto, xmlschema

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

返回xml文件的xml schema

< xsd:schema  targetnamespace ="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:import  namespace ="http://schemas.microsoft.com/sqlserver/2004/sqltypes"  schemalocation ="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd"   />
  
< xsd:element  name ="employees" >
    
< xsd:complextype >
      
< xsd:attribute  name ="employeeid"  type ="sqltypes:int"  use ="required"   />
      
< xsd:attribute  name ="firstname"  use ="required" >
        
< xsd:simpletype >
          
< xsd:restriction  base ="sqltypes:nvarchar"  sqltypes:localeid ="1033"  sqltypes:sqlcompareoptions ="ignorecase ignorekanatype ignorewidth"  sqltypes:sqlsortid ="52" >
            
< xsd:maxlength  value ="10"   />
          
</ xsd:restriction >
        
</ xsd:simpletype >
      
</ xsd:attribute >
      
< xsd:attribute  name ="lastname"  use ="required" >
        
< xsd:simpletype >
          
< xsd:restriction  base ="sqltypes:nvarchar"  sqltypes:localeid ="1033"  sqltypes:sqlcompareoptions ="ignorecase ignorekanatype ignorewidth"  sqltypes:sqlsortid ="52" >
            
< xsd:maxlength  value ="20"   />
          
</ xsd:restriction >
        
</ xsd:simpletype >
      
</ xsd:attribute >
    
</ xsd:complextype >
  
</ xsd:element >
</ xsd:schema >
< employees  xmlns ="urn:schemas-microsoft-com:sql:sqlrowset1"  employeeid ="1"  firstname ="nancy"  lastname ="davolio"   />
< employees  xmlns ="urn:schemas-microsoft-com:sql:sqlrowset1"  employeeid ="2"  firstname ="andrew"  lastname ="fuller"   />
< employees  xmlns ="urn:schemas-microsoft-com:sql:sqlrowset1"  employeeid ="3"  firstname ="janet"  lastname ="leverling"   />
< employees  xmlns ="urn:schemas-microsoft-com:sql:sqlrowset1"  employeeid ="4"  firstname ="margaret"  lastname ="peacock"   />
< employees  xmlns ="urn:schemas-microsoft-com:sql:sqlrowset1"  employeeid ="5"  firstname ="steven"  lastname ="buchanan"   />
< employees  xmlns ="urn:schemas-microsoft-com:sql:sqlrowset1"  employeeid ="6"  firstname ="michael"  lastname ="suyama"   />
< employees  xmlns ="urn:schemas-microsoft-com:sql:sqlrowset1"  employeeid ="7"  firstname ="robert"  lastname ="king"   />
< employees  xmlns ="urn:schemas-microsoft-com:sql:sqlrowset1"  employeeid ="8"  firstname ="laura"  lastname ="callahan"   />
< employees  xmlns ="urn:schemas-microsoft-com:sql:sqlrowset1"  employeeid ="9"  firstname ="anne"  lastname ="dodsworth"   />

2、raw模式

(1). sql语句:
   1:  ----将元素命名为自定义的名称employee
   2:  select employeeid,firstname,lastname from employees for xml raw ('employee')
 
(2). 所生成的xml文件:
   1:  <employee employeeid="1" firstname="nancy" lastname="davolio" />
   2:  <employee employeeid="2" firstname="andrew" lastname="fuller" />
   3:  <employee employeeid="3" firstname="janet" lastname="leverling" />
   4:  <employee employeeid="4" firstname="margaret" lastname="peacock" />
   5:  <employee employeeid="5" firstname="steven" lastname="buchanan" />
   6:  <employee employeeid="6" firstname="michael" lastname="suyama" />
   7:  <employee employeeid="7" firstname="robert" lastname="king" />
   8:  <employee employeeid="8" firstname="laura" lastname="callahan" />
   9:  <employee employeeid="9" firstname="anne" lastname="dodsworth" />

3、path模式:

(1). sql语句:

select employeeid "@id",firstname  "name/firstname",lastname "name/lastname"
from employees for xml path ('employee')

(2). 所生成的xml文件

 
< employee  id ="1" >    < name >      < firstname > nancy </ firstname >      < lastname > davolio </ lastname >    </ name > </ employee > < employee  id ="2" >    < name >      < firstname > andrew </ firstname >      < lastname > fuller </ lastname >    </ name > </ employee > < employee  id ="3" >    < name >      < firstname > janet </ firstname >      < lastname > leverling </ lastname >    </ name > </ employee > < employee  id ="4" >    < name >      < firstname > margaret </ firstname >      < lastname > peacock </ lastname >    </ name > </ employee > < employee  id ="5" >    < name >      < firstname > steven </ firstname >      < lastname > buchanan </ lastname >    </ name > </ employee > < employee  id ="6" >    < name >      < firstname > michael </ firstname >      < lastname > suyama </ lastname >    </ name > </ employee > < employee  id ="7" >    < name >      < firstname > robert </ firstname >      < lastname > king </ lastname >    </ name > </ employee > < employee  id ="8" >    < name >      < firstname > laura </ firstname >      < lastname > callahan </ lastname >    </ name > </ employee >

4、explicit模式

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

<employee empid="1">
<firstname>nancy</firstname>
<lastname>davolio</lastname>
</employee>
 
explicit模式解决这个问题的应用分为两个主要步骤:
1.定义要输出的xml文档结构;
2.传入实际的数据值;
(1). sql语句:
 
--定义输出xml文档的数据结构
select  1 as tag,
        null as parent,
        employeeid as [employee!1!empid],
        firstname as [employee!1!firstname!element],
        lastname as [employee!1!lastname!element]
from    employees
 
union all
--传入实际的数据
select  1,
        null,
        employeeid,
        firstname,
        lastname
from    employees
order by [employee!1!empid],
        [employee!1!firstname!element],
        [employee!1!lastname!element]
for     xml explicit

语句含义的解释:

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

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

parent栏用来指定当前tag的父级层次;null值表示该元素为顶级元素;

employeeid as [employee!1!empid],

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

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

5、为输出的xml文档添加根元素(root element)

(1). sql语句:

select employeeid,firstname,lastname from employees for xml auto, root('myroot')

(2). 所生成的xml文件

 
< myroot >    < employees  employeeid ="1"  firstname ="nancy"  lastname ="davolio"   />    < employees  employeeid ="2"  firstname ="andrew"  lastname ="fuller"   />    < employees  employeeid ="3"  firstname ="janet"  lastname ="leverling"   />    < employees  employeeid ="4"  firstname ="margaret"  lastname ="peacock"   />    < employees  employeeid ="5"  firstname ="steven"  lastname ="buchanan"   />    < employees  employeeid ="6"  firstname ="michael"  lastname ="suyama"   />    < employees  employeeid ="7"  firstname ="robert"  lastname ="king"   />    < employees  employeeid ="8"  firstname ="laura"  lastname ="callahan"   />    < employees  employeeid ="9"  firstname ="anne"  lastname ="dodsworth"   /> </ myroot >
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值