存储过程和用户​​定义函数之间的差异

时间:2010-01-11 04:36:35

标签: sql database stored-procedures

任何人都可以解释存储过程和用户​​定义函数之间的确切区别,以及每个函数在哪种情况下都有用吗?

4 个答案:

答案 0 :(得分:44)

这是我一直记住的:)

  • 过程可以返回零或n值,而函数可以返回一个必需的值。
  • 程序可以有输入/输出参数,而函数只能有输入参数。
  • 过程允许select和DML语句,而function只允许select语句。
  • 可以从过程调用函数,但不能从函数调用过程。
  • 异常可以通过程序中的try-catch块来处理,而try-catch块不能在函数中使用。
  • 我们可以在程序中进行交易管理,但我们不能进入功能。
  • 无法在select语句中使用过程,而可以将函数嵌入到select语句中。
  • UDF可以在WHERE / HAVING / SELECT部分​​的任何地方的SQL语句中使用,而不能存储过程。
  • 返回表的UDF可以视为另一个行集。这可以在JOIN中与其他表一起使用。
  • 内联UDF可以作为带参数的视图,可以在JOIN和其他Rowset操作中使用。

来源http://www.codeproject.com/Tips/286539/Difference-between-stored-procedure-and-function

答案 1 :(得分:14)

函数始终返回一个值,并且执行DML语句(INSERT / UPDATE / DELETE)。

存储过程无法返回值 - 您需要使用OUT参数 - 并且可以运行DML语句。

使用函数与存储过程的优势?


除了上面的比较,它们是平等的。但鉴于比较,根据您需要做的事情,您可能会比使用函数更频繁地使用存储过程。

答案 2 :(得分:5)

用户定义的函数几乎没有限制,例如可以使用DML语句等。请检查

答案 3 :(得分:0)

差异

  1. 过程可以接受输入(默认),输出和输入输出类型参数。函数只能接受输入类型的参数。

  2. 使用OUTPUT和/或INOUT参数,过程可能会或可能不会返回值,或者可能会返回多个值。一个过程可以通过OUTPUT和/或INOUT参数最多返回1024个值。 函数始终只返回一个值。

  3. 存储过程始终返回整数值,默认情况下为零。函数返回类型可以是标量或表或表值。

  4. 存储的proc可以创建一个表,但不能返回表。函数可以创建,更新和删除表变量。它可以返回一个表

  5. 存储过程可以通过使用插入,删除,更新和创建操作来影响数据库的状态。函数不会影响数据库的状态,这意味着我们无法在数据库上执行插入,删除,更新和创建操作操作。

  6. 存储过程以编译形式存储在数据库中。函数只能在运行时进行解析和编译。

  7. 可以使用exec关键字独立调用存储的proc。存储过程不能在select / where / having子句中使用。从select / where / having子句中调用函数。甚至我们都可以加入两个功能。

  8. 正常情况下,存储过程将用于执行特定任务。 函数将用于计算价值。存储过程允许getdate()或可以允许其他非确定性函数。 函数不允许使用不确定性函数,例如getdate()。

  9. 在存储过程中,我们可以使用事务处理语句。我们无法在函数中使用。

  10. 存储过程可以执行所有DML操作,例如插入新记录,更新记录和删除现有记录。该功能不允许我们像在存储过程中那样在数据库表中执行DML操作。它只允许我们执行选择操作。不允许在现有表上执行DML。但是我们仍然只能对用户定义函数内部的表变量执行DML操作。

  11. 可以在存储过程中创建临时表(派生)。对于功能,这是不可能的。

  12. 当sql语句遇到错误时,T-SQL将忽略SPROC中的错误,并继续执行其余代码中的下一条语句。如果是函数,T-SQL将停止执行下一条语句。

请参阅此链接:

https://www.spritle.com/blogs/2011/03/03/differences-between-stored-procedures-and-user-defined-functions/