在SQL Server 2005中,如何使用列值作为xml元素名称?

前端之家收集整理的这篇文章主要介绍了在SQL Server 2005中,如何使用列值作为xml元素名称?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
作为一个例子,简化我在做什么,说我有以下表格:
declare @elements table (id int,name nvarchar(20))

insert into @elements (id,name) values (1,'FirstName')
insert into @elements (id,name) values (2,'Surname')
insert into @elements (id,name) values (3,'Address')

declare @values table (id int,value nvarchar(20),elementId int)

insert into @values (id,value,elementId) values (1,'XXX',1)
insert into @values (id,elementId) values (2,'YYY',2)
insert into @values (id,elementId) values (3,'ZZZ',3)

它简单地定义了一个可以是动态的元素名称表,对它们定义了一个值表.

我想要的是以以下形式生成XML,其中@elements表的值成为元素名称,而@values表的值将变为值.

<Customer>
    <FirstName>XXX</FirstName>
    <Surname>YYY</Surname>
    <Address>ZZZ<Address>
</Customer>

不过我到目前为止xml的努力并没有那么好:

select e.name,v.value from @elements e
inner join @values v on v.elementId = e.id
for xml path(''),root('customer')

回报

<customer>
  <name>FirstName</name>
  <value>XXX</value>
  <name>Surname</name>
  <value>YYY</value>
  <name>Address</name>
  <value>ZZZ</value>
</customer>

为xml自动返回

<customer>
  <e name="FirstName">
    <v value="XXX" />
  </e>
  <e name="Surname">
    <v value="YYY" />
  </e>
  <e name="Address">
    <v value="ZZZ" />
  </e>
</customer>

用于xml原始返回

<customer>
  <row name="FirstName" value="XXX" />
  <row name="Surname" value="YYY" />
  <row name="Address" value="ZZZ" />
</customer>

有没有办法可以从列中获取值作为元素名称输出?我相信我在这里显然很简单.

解决方法

这是cheezy但它的作品…
select 
  cast('<' + name + '>' + value + '</' + name + '>' as xml) 
from @values v 
join @elements e on v.id = e.id     
for xml path(''),root('Customer')

—结果—

<Customer>
  <FirstName>XXX</FirstName>
  <Surname>YYY</Surname>
  <Address>ZZZ</Address>
</Customer>

猜你在找的MsSQL相关文章