【问题标题】:Using UNION ALL in STUFF / XML Path在 STUFF / XML 路径中使用 UNION ALL
【发布时间】:2012-02-06 18:47:56
【问题描述】:

消息 1086,第 15 级,状态 1,第 20 行 FOR XML 子句在视图、内联函数、派生表和包含集合运算符的子查询中无效。要解决此问题,请使用派生表语法包装包含集合运算符的 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() 中起作用?

【问题讨论】:

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


    【解决方案1】:

    有一个简单的解决方法,您应该用另一个选择来包装您的联合查询(或任何派生表)。执行此操作,然后正常继续语法:

    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,'')
    

    我检查过,它运行良好

    【讨论】:

    • IJ 的别名是什么?
    • 我相信它们是不需要的,我把它们放在以防万一。如果您放置它们,您可以在以后的参考中将表 dbo.Table1 称为 j。但是,需要 k,因为如果它不存在,就无法引用该子查询的列。
    • 如何,为什么,在哪里,何时,什么? (这在任何地方都有记录吗?显然不在 MSDN 上) - 它是特定于版本的吗?
    猜你喜欢
    • 2014-09-20
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多