SQL UNION FOR выходной столбец имени XML - PullRequest
13 голосов
/ 16 февраля 2012

Я пытаюсь сгенерировать вывод XML из SQL, и мне нужно использовать оператор UNION, а также назвать столбец вывода.

У меня раньше это работало, когда мне не нужно было использовать оператор 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 Ответ

22 голосов
/ 16 февраля 2012

Оберните ваши 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
...