SQL Server中存储过程和函数的区别?

SQL Server中存储过程和函数的区别?,sql,sql-server,Sql,Sql Server,我知道存储过程和函数之间的主要区别,但一个区别是可以从存储过程中调用函数,但不能从函数中调用存储过程 我的问题是为什么不能从函数中调用存储过程?函数不能对数据库进行任何更改,但可以读取它们 存储过程可以对数据库做任何事情 不能从函数执行存储过程。但您可以在存储过程中执行函数 您可以从函数执行扩展存储过程。(虽然这不是一个好的做法)。函数不能对数据库进行任何更改,但可以读取它们 存储过程可以对数据库做任何事情 不能从函数执行存储过程。但您可以在存储过程中执行函数 您可以从函数执行扩展存储过程。(虽

我知道存储过程和函数之间的主要区别,但一个区别是可以从存储过程中调用函数,但不能从函数中调用存储过程


我的问题是为什么不能从函数中调用存储过程?

函数不能对数据库进行任何更改,但可以读取它们

存储过程可以对数据库做任何事情

不能从函数执行存储过程。但您可以在存储过程中执行函数


您可以从函数执行扩展存储过程。(虽然这不是一个好的做法)。

函数不能对数据库进行任何更改,但可以读取它们

存储过程可以对数据库做任何事情

不能从函数执行存储过程。但您可以在存储过程中执行函数


您可以从函数执行扩展存储过程。(虽然这不是一个好的做法)。

存储过程可以更改数据,因此函数调用存储过程的结果可能是不确定的。例如,如果您编写了一个存储过程,将用户在一段时间内未登录时设置为非活动,并且您编写了一个计算非活动用户数的函数,但在此之前调用了该存储过程,则在执行该函数时,该函数的预期结果将发生更改


我也不同意这种方法,但这就是它的工作原理。请注意,过程可以有out参数,这意味着您可以将它们用作函数。因此,如果要从f1调用p1,则将f1修改为具有out参数的存储过程。

存储过程可以更改数据,因此调用存储过程的函数的结果可能是不确定的。例如,如果您编写了一个存储过程,将用户在一段时间内未登录时设置为非活动,并且您编写了一个计算非活动用户数的函数,但在此之前调用了该存储过程,则在执行该函数时,该函数的预期结果将发生更改

我也不同意这种方法,但这就是它的工作原理。请注意,过程可以有out参数,这意味着您可以将它们用作函数。因此,如果要从f1调用p1,请将f1修改为具有out参数的存储过程。

请查看此链接请查看此链接