2012-02-16 9 views
8

Я пытаюсь создать XML-вывод из SQL и должен использовать оператор UNION, а также имя столбца вывода.SQL UNION FOR XML name output column

Я имел эту работу раньше, когда мне не нужно использовать UNION заявление с помощью:

select(
SELECT 

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

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

Который назвал столбец вывода XML в XmlOutput

Я сейчас пытаюсь:

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 

Но получите сообщение об ошибке, знает ли кто-нибудь об этом?

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. 

Благодаря J.

+1

Что означает сообщение об ошибке? – Mithrandir

+0

Сообщение об ошибке выше ... спасибо – JBoom

ответ

15

обернуть 2 выбирает на один файл и затем сделать:

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

Я не понимаю, что вы просите меня попробовать. – JBoom

+0

Я думаю, что помимо тега UNION для xml применяется только к второму запросу (синтаксическая разметка). Возможно, если вы укажете оба запроса как один, он будет работать – Diego

+0

, почему downvote? Я просто проверил тест, и он отлично работает – Diego