首页 > 解决方案 > 为什么 XML 结果在某些选择类型上给出 NULL?

问题描述

例如,使用递归 CTE 时,有一些检查可确保用户无法创建问题循环,其中配方的成分就是配方。尝试通过 For XML 提取用户响应数据给出了一个我不明白的奇怪结果。

我可以用第三个 CTE 解决这个问题,但我找不到任何可以解释我得到的结果的东西(我可能对谷歌的问题措辞不够好)。

设置给出相同结果的代码 -

WITH cte1 AS (
    SELECT 'A' AS Val
    UNION all
    SELECT 'B' AS Val
    UNION all
    SELECT 'C' AS Val
    ),

    cte2 AS (   
    SELECT 'A' AS Val
    UNION all
    SELECT 'B' AS Val
    UNION all
    SELECT 'D' AS Val
    )

最后一步:

    cte3 as
        (
        SELECT Val FROM cte1 
        intersect 
        SELECT Val FROM cte2 
        ) 

SELECT  (SELECT Val + ' ' FROM  cte3 FOR XML PATH(''))

或者

    SELECT Val + ' ' FROM cte1 
    intersect
    SELECT Val + ' ' FROM cte2 
    FOR XML PATH('')    

或者

SELECT (
    SELECT Val + ' ' FROM cte1 
    intersect
    SELECT Val + ' ' FROM cte2 
    FOR XML PATH('')    
    )

第一个选项给出预期的“A B”。

第二个选项也提供“A B”,但作为 XML 输出。

但是,第三个选项给出了 NULL。这是为什么?

标签: sqlnullcommon-table-expressionfor-xml-path

解决方案


推荐阅读