0

对于下面的 TSQL,期望是生成和输出 COL 嵌套在 T 中的位置,但返回一个平面结果。

With FilteredTables as (
    select * from INFORMATION_SCHEMA.TABLES
    union
    select * from INFORMATION_SCHEMA.TABLES -- Repeated just to show the issue
)
select T.TABLE_SCHEMA, T.TABLE_NAME,
    COL.COLUMN_NAME, --as "columns.name",
    COL.DATA_TYPE --as "columns.type"
    from FilteredTables T
    INNER JOIN INFORMATION_SCHEMA.COLUMNS COL
        on T.TABLE_SCHEMA = COL.TABLE_SCHEMA
        and T.TABLE_NAME = COL.TABLE_NAME
--order by [Schema], [Table]
FOR XML Auto

当从 FilteredTables CTE 中删除联合时,它按预期工作

这是一个 SQL 错误还是有什么好的理由?

4

1 回答 1

2

如果需要 Union 而不是 using FROM cte_name,请使用FROM (SELECT * FROM cte_name)

With FilteredTables as (
    select * from INFORMATION_SCHEMA.TABLES
    union
    select * from INFORMATION_SCHEMA.TABLES -- Repeated just to show the issue
)
select T.TABLE_SCHEMA, T.TABLE_NAME,
    COL.COLUMN_NAME, --as "columns.name",
    COL.DATA_TYPE --as "columns.type"
    from 
       -- Workaround  
       (SELECT * FROM FilteredTables) T

    INNER JOIN INFORMATION_SCHEMA.COLUMNS COL
        on T.TABLE_SCHEMA = COL.TABLE_SCHEMA
        and T.TABLE_NAME = COL.TABLE_NAME
--order by [Schema], [Table]
FOR XML Auto
于 2020-06-05T15:25:46.553 回答