Sql 所有函数都在一个视图中';s列集已执行,即使它们不是';是否在查询中显式引用?

Sql 所有函数都在一个视图中';s列集已执行,即使它们不是';是否在查询中显式引用?,sql,sql-server,view,user-defined-functions,Sql,Sql Server,View,User Defined Functions,假设我有一个视图定义,例如: CREATE VIEW dbo.view1 AS SELECT col1 , col2 , dbo.Function(col3) AS col3 FROM table1 现在假设我进行以下查询: SELECT col1 FROM view1 在这种情况下,函数是否会执行,因为它在查询中没有被引用 提前感谢。感谢Larnu关于检查执行计划的建议,我已经确定,至少在我上面概述的情况下,如果列未被引用,则函数不会执行。您的实验向您展

假设我有一个视图定义,例如:

CREATE VIEW dbo.view1
AS
SELECT col1
       , col2
       , dbo.Function(col3) AS col3
  FROM table1
现在假设我进行以下查询:

SELECT col1
  FROM view1
在这种情况下,函数是否会执行,因为它在查询中没有被引用


提前感谢。

感谢Larnu关于检查执行计划的建议,我已经确定,至少在我上面概述的情况下,如果列未被引用,则函数不会执行。

您的实验向您展示了什么?执行计划建议了什么?优化器应该能够确定不需要执行函数。是否有可能取决于产品的具体版本(到补丁级别)、数据量、月球阶段等。如果您想知道优化器做了什么,您需要询问执行计划。可能;视图不会修复任何内容,因此查询应该作为执行的一部分进行重新编写和重新规划(即优化器将在视图上执行查询并向下推送所有内容,这样就好像您正在运行在视图中编码的查询,列数更少),而且,我认为很有可能,运行的查询不会对函数稍加引用。但是如果你有一个标量函数作为列值,你应该考虑无论如何都要修复。我应该先想到这个!