Упрощение того, что я делаю, например, скажем, у меня есть следующие таблицы:
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, value, elementId) values (2, 'YYY', 2)
insert into @values (id, value, elementId) values (3, 'ZZZ', 3)
, которая просто определяет таблицу имен элементов, которая может быть динамической, для которой определяется таблица значений.
Я хотел бы создать XML в следующей форме, где значения таблицы @elements становятся именами элементов, а значения таблицы @values становятся значениями.
<Customer>
<FirstName>XXX</FirstName>
<Surname>YYY</Surname>
<Address>ZZZ<Address>
</Customer>
Однако мои усилия с for 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>
for xml auto
возвращает
<customer>
<e name="FirstName">
<v value="XXX" />
</e>
<e name="Surname">
<v value="YYY" />
</e>
<e name="Address">
<v value="ZZZ" />
</e>
</customer>
for xml raw
возвращает
<customer>
<row name="FirstName" value="XXX" />
<row name="Surname" value="YYY" />
<row name="Address" value="ZZZ" />
</customer>
Есть ли способ получить значения из столбца для вывода в виде имен элементов? Я уверен, что упускаю что-то явно простое здесь.