【发布时间】:2016-02-25 11:43:53
【问题描述】:
我知道存储过程和函数之间的主要区别,但一个区别是可以从存储过程中调用函数,但不能从函数中调用存储过程。
我的问题是为什么我们不能从函数中调用存储过程?
【问题讨论】:
标签: sql sql-server
我知道存储过程和函数之间的主要区别,但一个区别是可以从存储过程中调用函数,但不能从函数中调用存储过程。
我的问题是为什么我们不能从函数中调用存储过程?
【问题讨论】:
标签: sql sql-server
存储过程可以更改数据,因此函数调用存储过程的结果可能是不确定的。例如,如果您编写了一个存储过程,如果用户有一段时间没有登录,则将其设置为不活动,并且您编写了一个计算不活动用户的函数,但在此之前调用了该存储过程,那么该函数的预期结果将是在执行时更改。
我也不同意这种方法,但这就是它的工作原理。请注意,过程可以有 out 参数,这意味着您可以将它们用作函数。所以,如果你想从 f1 调用 p1,那么将 f1 修改为一个没有参数的存储过程。
【讨论】:
函数不能对数据库进行任何更改,但可以读取它们。
存储过程可以对数据库做任何事情。
您不能从函数执行存储过程。但是你可以在存储过程中执行一个函数。
您可以从函数执行扩展存储过程。(虽然这不是一个好习惯)。
【讨论】: