2017-03-03 36 views
2

如何为SQL Server 2000(兼容级别= 80)和SQL Server 2008(兼容级别= 100)生成相同的xml输出?在SQL Server 2000和2008中使用XML auto的不同XML结果

实施例:

create table #temp(a int, b varchar(10)) 

insert into #temp 
select 1, 'abc' 
union 
select 1,'def' 

select * 
from 
    (select * from #temp child) parent 
for xml auto, elements 

用于SQL Server 2000(兼容级别80)输出:

<child> 
     <a>1</a> 
     <b>abc</b> 
</child> 
<child> 
     <a>1</a> 
     <b>def</b> 
</child> 

输出的SQL Server 2008(兼容级别100):

<parent> 
      <a>1</a> 
      <b>abc</b> 
    </parent> 
    <parent> 
      <a>1</a> 
      <b>def</b> 
    </parent> 

由于

+0

题外话:如果真有可能去升级。 2000甚至不再支持(相当长一段时间)。优点和新功能 - 在大多数情况下 - 值得。 – Shnugo

回答

0

更换别名childparent应该做的伎俩:

create table #temp(a int, b varchar(10)) 

insert into #temp 
select 1, 'abc' 
union 
select 1,'def' 

select * 
from 
    (select * from #temp parent) parent 
for xml auto, elements 

我尝试这个查询有兼容级别80和100在这两种情况下,结果是:

<parent> 
    <a>1</a> 
    <b>abc</b> 
</parent> 
<parent> 
    <a>1</a> 
    <b>def</b> 
</parent>