2012-02-16 15 views
8

私はSQLからXML出力を生成しようとしており、UNION文を使用して出力列に名前を付ける必要があります。XML UNION FOR XML name出力列

私は私が使用してUNIONステートメントを使用する必要はありませんでしたときに前にこの作業を持っていた:

私は今しようとしていますXmlOutput

として出力XML列の名前

select(
SELECT 

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

FROM [UserAccs] FOR XML PATH ('AccountDetails'), root ('Root') 
) as 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が2番目のクエリにのみ適用されていると考えています(解析するもの)。たぶん両方のクエリを1つとして指定すると – Diego

+0

なぜdownvote?私はちょうどテストを実行し、それは完全に動作します – Diego