是否计算了 Table 表达式中未使用的部分?

Are Unused Portions of Table Expressions Calculated?

假设我有一个 SQL 服务器视图定义如下:

CREATE VIEW V_Test1 AS
SELECT ColumnA, ColumnB
FROM Table1

然后我将另一个视图定义为:

CREATE VIEW V_Test2 AS
SELECT ColumnA
FROM Table1

考虑到视图只是一个 table 表达式,甚至不调用 ColumnB,这 2 个语句是否会同样优化?如果 ColumnB 不在 Table1 中而是复杂逻辑或调用另一个函数的结果怎么办?

SELECT ColumnA FROM V_Test1
SELECT ColumnA FROM V_Test2

是的,在 Microsoft SQL Server 中它们将具有相同的执行计划。你甚至可以在 ColumnB 中写入导致错误的表达式(例如“1/0”),它不会被执行。