2012-02-06 156 views
7

Msg 1086,Level 15,State 1,Line 20 FOR XML子句在包含set運算符時在視圖,內聯函數,派生表和子查詢中無效。要解決此問題,請使用派生表語法來包裝包含set操作符的SELECT,然後在其上應用FOR XML。在STUFF/XML路徑中使用UNION ALL

我得到這個錯誤,當我運行此:

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

工作正常,當我運行這個(沒有UNION ALL)

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

任何建議,爲什麼UNION ALL不工作,或如何讓它在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

,似乎工作,謝謝! – 2012-02-06 19:00:27

+0

什麼是I'和'J'的別名? – alzaimar 2013-10-07 05:53:44

+1

我相信他們並不需要,我只是爲了以防萬一。如果你把它們放在後面的引用中,你可以參考表dbo.Table1作爲j。然而,k是需要的,因爲如果它不在那裏,就沒有辦法引用該子查詢的列。 – Gaspa79 2013-10-08 15:43:40