函数和存储过程之间的区别

让你望见影子的墙 2008-04-18 09:14:56
谁能告诉我存储过程和函数的本质区别?两个都能够被调用,也都可以有输入参数,输出参数,都可以包含一定的sql语句,什么时候用存储过程,什么时候用函数呢?
...全文
128 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrt_chen 2011-11-21
  • 打赏
  • 举报
回复
晓风残月0110 2008-04-18
  • 打赏
  • 举报
回复
另外函数有一些限制

/*自定义函数的使用有些限制
包括UPDATE和DELETE,都不可以,自定义函数和存储过程的定位是不一样的,
自定义函数主要用于数据的计算,只能控制函数内部定义的局部变量,包括游标和表,
都必须在函数内部定义才能使用,对外部数据库作出的任何永久性修改,都是禁止的。

具体来说,不能在函数中执行的操作包括:对数据库表的修改,
对不在函数上的局部游标进行操作,发送电子邮件,尝试修改目录,
以及生成返回至用户的结果集。

允许的操作也不少的,具体包含以下这些:
=> DECLARE 语句,该语句可用于定义函数局部的数据变量和游标。
=> 为函数局部对象的赋值,如使用 SET 为标量和表局部变量赋值。
=> 游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。
不允许使用 FETCH 语句将数据返回到客户端。
仅允许使用 FETCH 语句通过 INTO 子句给局部变量赋值。
=> 除 TRY...CATCH 语句之外的控制流语句。
=> SELECT 语句,该语句包含具有为函数的局部变量赋值的表达式的选择列表。
=> INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部表变量。
=> EXECUTE 语句,该语句调用扩展存储过程。
晓风残月0110 2008-04-18
  • 打赏
  • 举报
回复
什么时候用不好说,看具体情况

先了解一下区别吧,慢慢就知道怎么用了

-----------------函数和proc的区别---------------------------
1. 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2. 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
3. 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
4. 当存储过程和函数被执行的时候,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在下次执行时就不用再编译了。
hery2002 2008-04-18
  • 打赏
  • 举报
回复
1.看看以前的帖子:
http://topic.csdn.net/t/20030806/16/2116067.html
http://topic.csdn.net/t/20021202/15/1223530.html
2.看看联机丛书:
存储过程:
http://technet.microsoft.com/zh-cn/library/ms191428.aspx
用户自定义函数:
http://technet.microsoft.com/zh-cn/library/ms190704.aspx
wlinglong 2008-04-18
  • 打赏
  • 举报
回复
看哪个顺眼用哪个 哈哈
liangCK 2008-04-18
  • 打赏
  • 举报
回复
这个,,,看看联机丛书好了。

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧