2012-02-16 12 views
8

Estoy intentando generar un resultado XML a partir de SQL y necesito usar una instrucción UNION y también nombrar la columna de salida.SQL UNION FOR XML name output column

tuve este trabajo antes de que yo no tenía necesidad de utilizar una instrucción UNION usando:

select(
SELECT 

    [CompanyName], 
    [Address1], 
    [Address2], 
    [Address3], 
    [Town], 
    [County], 
    [Postcode], 
    [Tel], 
    [Fax], 
    [Email], 
    [LocMap] 

FROM [UserAccs] FOR XML PATH ('AccountDetails'), root ('Root') 
) as XmlOutput 

que nombró la columna XML de salida como XmlOutput

Ahora estoy tratando:

select(
SELECT 

    [CompanyName], 
    [Address1], 
    [Address2], 
    [Address3], 
    [Town], 
    [County], 
    [Postcode], 
    [Tel], 
    [Fax], 
    [Email], 
    [LocMap] 

FROM [UserAccs] 

UNION 

SELECT 

    [CompanyName], 
    [Address1], 
    [Address2], 
    [Address3], 
    [Town], 
    [County], 
    [Postcode], 
    [Tel], 
    [Fax], 
    [Email], 
    [LocMap] 

FROM [UserAppAccs] 



FOR XML PATH ('AccountDetails'), root ('Root') 
) as XmlOutput 

Pero recibe un mensaje de error, ¿alguien sabe cómo evitarlo?

The FOR XML clause is invalid in views, inline functions, derived tables, and subqueries when they contain a set operator. To work around, wrap the SELECT containing a set operator using derived table syntax and apply FOR XML on top of it. 

Gracias J.

+1

¿Qué dice el mensaje de error? – Mithrandir

+0

Mensaje de error anterior ... gracias – JBoom

Respuesta

15

embalar usted selecciona 2 en uno solo y luego hacer:

select (
    select id, name from (
     select id, name 
     from xmltest 
     UNION 
     select id, name 
     from xmltest 
) A 
FOR XML PATH ('AccountDetails'), root ('Root') 
) As XmlOutput 
+0

No entiendo lo que me pides que pruebe. – JBoom

+0

Creo que, además de la etiqueta UNION, el para xml se aplica solo a la segunda consulta (una cosa de análisis). Tal vez si especificas ambas consultas como una, funcionará – Diego

+0

¿por qué downvote? Acabo de ejecutar una prueba y funciona perfectamente – Diego