2012-02-06 158 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