参考链接

存储过程

用户定义的一系列SQL语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程。

函数

通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。


区别

  • 函数只能通过 RETURN 语句返回单个值或者表对象。而存储过程不允许执行 RETURN ,但是通过 OUT 参数返回多个值。
  • 函数是可以嵌入在SQL中使用的,可以在SELECT中调用,而存储过程不行。
  • 函数限制比较多,比如不能用临时表,只能用表变量。还有一些函数都不可用等等.而存储过程的限制相对就比较少。
  • 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
  • 当存储过程和函数被执行的时候,SQL Manager 会到 procedure cache 中去取相应的查询语句,如果在 procedure cache 里没有相应的查询语句,SQL Manager 就会对存储过程和函数进行编译。
  • Procedure cache 中保存的是执行计划 (execution plan) ,当编译好之后就执行 procedure cache 中的 execution plan,之后 SQL SERVER 会根据每个 execution plan 的实际情况来考虑是否要在 cache中保存这个 plan,评判的标准一个是这个 execution plan 可能被使用的频率;其次是生成这个 plan 的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。