use*_*755 5 sql-server stored-procedures sql-function
为什么在相反的情况下我们不能在函数内执行存储过程?
你不能在函数内部执行存储过程,因为一个功能是不允许修改数据库的状态,和存储过程都可以修改数据库的状态.
这是根据定义(参见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.这显然不是你想要发生的事情.