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