gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:15:00 26 4
gpt4 key购买 nike

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

最佳答案

您不能在函数内执行存储过程,因为不允许函数修改数据库状态,而存储过程允许修改数据库状态。

这是根据定义(参见 CREATE FUNCTION - Limitations and Restrictions )。

User-defined functions cannot be used to perform actions that modify the database state.

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

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

SELECT calculate_something(a) FROM some_table;

现在考虑一下,如果允许函数 calculate_something 执行一个存储过程来删除 some_table 中的所有行,会发生什么情况。您的目的是使用 some_table.a 列的值进行计算,但最终...删除了 some_table 中的所有行。这显然不是您希望发生的事情。

关于sql-server - 为什么我们不能在 SQL Server 的函数内执行存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2896445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com