首页 > 解决方案 > SQL Server 中“With”语句中的列名参数

问题描述

从 Microsoft 在线文档 ( https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql?view=sql-server-ver15 ),它提到“With”语句可以有一个列名作为参数,然后它说:

“只有在查询定义中提供了所有结果列的不同名称时,列名列表才是可选的。”

“如果在查询定义中提供了所有结果列的不同名称”实际上是什么意思?我经常使用“With”语句,但我从不在参数中指定列名。

我试图浏览整个文档,但似乎没有任何地方对此进行了更详细的解释。

有谁知道在什么情况下我需要指定列名?

提前致谢!

标签: sql-servercommon-table-expressionwith-statement

解决方案


很简单,定义 CTE 的查询结果集必须返回一组具有不同名称的列。例如,以下将不起作用:

with cte as (select 1 as x, 2 as x)
select * from cte; 

结果集有 2 个名为“x”的列。在这种情况下,您必须在 cte 的定义中提供列名,因为查询会生成具有重复名称的结果集。因此,您需要使用以下表格:

with cte(x, y) as (select 1 as x, 2 as x)
select * from cte; 

一般来说,最好的做法是任何结果集都没有重复的列名。


推荐阅读