17

SQL から XML 出力を生成しようとしていますが、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.

4

1 に答える 1

31

次のように、2 つの選択を 1 つの選択にラップします。

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
于 2012-02-16T12:25:27.807 に答える