作为一个例子,简化我在做什么,说我有以下表格:
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>
