2012-02-06 16 views
7

Msg 1086、レベル15、状態1、行20 FOR XML句は、ビュー、インライン関数、派生テーブル、およびサブクエリにセット演算子が含まれている場合は無効です。回避するには、派生テーブルの構文を使用してセット演算子を含むSELECTをラップし、その上にFOR XMLを適用します。STUFF/XMLパスでのUNION ALLの使用

私は私がこれを実行すると、このエラーが出る:UNION ALLが動作しない理由を任意の提案

SELECT 
    STUFF((
    SELECT 1 
    FOR XML PATH('') 
    ),1,0,'') [COLUMN] 

私は(連合ALLなし)これを実行すると

SELECT 
    STUFF((
    SELECT 1 
    UNION ALL 
    SELECT 2 
    FOR XML PATH('') 
    ),1,0,'') [COLUMN] 

は正常に動作、またはどのようにSTUFF()の内部で動作するようにするには

答えて

13

シンプルな回避策があります。ユニオンクエリ(またはその派生テーブル)を別の選択肢でラップする必要があります。これを実行して、正常にsintaxを続ける:このような

select * from 
(
SELECT 1 as I 
UNION ALL 
SELECT 2 as J 
) as K 

何かが、あなたが探しているものです:

SELECT STUFF((
    select * from(

    SELECT * from dbo.Table1 as I 
    UNION ALL 
    SELECT * from dbo.Table2 as j 
    ) as k 
    FOR XML PATH('') 
    ),1,0,'') 

私がチェックし、それが

+1

完璧に動作動作するように思われること、ありがとう! –

+0

「I」と「J」の別名は何ですか? – alzaimar

+1

私は彼らが必要ではないと信じています。それらを置くと、将来の参考文献でdbo.Table1という表をjと呼ぶことができます。しかし、kが必要なのは、そこになければ、そのサブクエリの列を参照する方法がないからです。 – Gaspa79

関連する問題