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