2012-02-16 15 views
8

Sto provando a generare un output XML da SQL e ho bisogno di utilizzare un'istruzione UNION e anche il nome della colonna di output.SQL UNION FOR XML nome colonna di output

Ho avuto questo lavoro prima di quando non ho bisogno di usare un'istruzione UNION utilizzando:

select(
SELECT 

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

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

che ha chiamato la colonna di output XML come XmlOutput

Ora sto cercando:

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 

Ma ricevi un messaggio di errore, qualcuno sa come aggirare questo?

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. 

Grazie J.

+1

Cosa significa il messaggio di errore dire? – Mithrandir

+0

messaggio di errore sopra ... grazie – JBoom

risposta

15

avvolgere le 2 seleziona su una sola e poi fare:

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

Non capisco cosa mi stai chiedendo di provare. – JBoom

+0

Penso che oltre al tag UNION il xml venga applicato solo alla seconda query (una cosa di analisi). Forse se si specificano entrambe le query come una cosa funzionerà – Diego

+0

perché downvote? Ho appena eseguito un test e funziona perfettamente – Diego