在STUFF / XML路径中使用UNION ALL

时间:2012-02-06 18:47:57

标签: sql-server sql-server-2008 tsql

Msg 1086,Level 15,State 1,Line 20 当FOR XML子句包含set运算符时,它们在视图,内联函数,派生表和子查询中无效。要解决此问题,请使用派生表语法包装包含set运算符的SELECT,并在其上应用FOR XML。

我运行时遇到此错误:

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()内工作的任何建议?

1 个答案:

答案 0 :(得分:17)

有一个简单的解决方法,你应该用另一个select包装你的union查询(或任何派生表)。这样做然后通常继续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,'')

我检查过它完美无瑕