在STUFF/XML路径中使用UNION ALL

Con*_*eak 8 t-sql sql-server sql-server-2008

消息1086,级别15,状态1,行20 FOR XML子句在视图,内联函数,派生表和子查询中包含集合运算符时无效.要解决此问题,请使用派生表语法包装包含set运算符的SELECT,并在其上应用FOR XML.

我运行时遇到此错误:

SELECT
    STUFF((
    SELECT 1
    UNION ALL
    SELECT 2
    FOR XML PATH('')
    ),1,0,'') [COLUMN]
Run Code Online (Sandbox Code Playgroud)

我运行时工作正常(没有Union ALL)

SELECT
    STUFF((
    SELECT 1
    FOR XML PATH('')
    ),1,0,'') [COLUMN]
Run Code Online (Sandbox Code Playgroud)

任何建议为什么UNION ALL不起作用,或如何让它在内部工作STUFF()

Gas*_*a79 19

有一个简单的解决方法,你应该用另一个select包装你的union查询(或任何派生表).这样做然后通常继续sintax:

select * from
(
SELECT 1 as I
UNION ALL
SELECT 2 as J
) as K
Run Code Online (Sandbox Code Playgroud)

你正在寻找的是这样的东西:

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,'')
Run Code Online (Sandbox Code Playgroud)

我查了一下,它完美无瑕

  • 我相信他们不需要,我把它们放在以防万一.如果你把它们放在一起,你可以在未来的参考文献中将表dbo.Table1称为j.然而,k是需要的,因为如果它不存在,就没有办法引用该子查询的列. (2认同)