为什么我们不能在SQL Server中的函数内执行存储过程

use*_*755 5 sql-server stored-procedures sql-function

为什么在相反的情况下我们不能在函数内执行存储过程?

TT.*_*TT. 6

你不能在函数内部执行存储过程,因为一个功能是不允许修改数据库的状态,和存储过程可以修改数据库的状态.

这是根据定义(参见CREATE FUNCTION - 限制和限制).

用户定义的函数不能用于执行修改数据库状态的操作.

存储过程可能会修改数据库状态,也可能不会.但是SQL Server编译器不应该分析存储过程以了解它是否修改了数据库状态.因此,不允许从函数内执行存储过程.

存在的函数只是简单地计算某些东西,一个值或一个表结果,仅此而已.SELECT例如,可以在查询中调用这些函数

SELECT calculate_something(a) FROM some_table;
Run Code Online (Sandbox Code Playgroud)

现在考虑如果calculate_something允许函数执行将删除所有行的存储过程会发生什么some_table.您的意图是使用some_table.a列的值计算某些内容,但最终会删除所有行some_table.这显然不是你想要发生的事情.


Mar*_*lan 0

我怀疑这是因为函数的执行不应该以任何方式修改数据,并且允许您运行存储过程将允许您执行此操作...