Simplificar lo que estoy haciendo algo, como un ejemplo, decir que tengo las siguientes tablas:¿Cómo uso los valores de columna como nombres de elementos xml utilizando para xml en SQL Server 2005?
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)
que simplemente se define una tabla de nombres de elementos que podrían ser dinámico, contra el que se definen una tabla de valores.
Lo que me gustaría es generar XML de la siguiente forma, donde los valores de la tabla @elements se convierten en los nombres de los elementos, y los valores de la tabla @values se convierten en los valores.
<Customer>
<FirstName>XXX</FirstName>
<Surname>YYY</Surname>
<Address>ZZZ<Address>
</Customer>
Sin embargo mis esfuerzos con for xml
hasta el momento no van tan bien:
select e.name, v.value from @elements e
inner join @values v on v.elementId = e.id
for xml path(''), root('customer')
vuelve
<customer>
<name>FirstName</name>
<value>XXX</value>
<name>Surname</name>
<value>YYY</value>
<name>Address</name>
<value>ZZZ</value>
</customer>
for xml auto
vuelve
<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
vuelve
<customer>
<row name="FirstName" value="XXX" />
<row name="Surname" value="YYY" />
<row name="Address" value="ZZZ" />
</customer>
¿Hay alguna manera de obtener los valores de una columna a la salida como nombres de elementos? Estoy seguro de que me estoy perdiendo algo obviamente simple aquí.
creo que no se puede hacer eso. Puede hacer mucho con los diversos comandos FOR XML, pero en todos los casos, los nombres de los elementos y/o atributos XML resultantes deben ser corregidos, p. escrito por ti. No sé de ninguna manera para obtenerlos de una tabla y asignarlos dinámicamente. –