随笔-94  评论-662  文章-0  trackbacks-0

SQL中存储过程和自定义函数的区别

 

存储过程:

    存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。


    可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点

 

    1、可以在单个存储过程中执行一系列 SQL 语句。
    2、可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。

    3、存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。


用户定义函数:


    Microsoft SQL Server 2000 允许创建用户定义函数。与任何函数一样,用户定义函数是可返回值的例程。根据所返回值的类型,每个用户定义函数可分成以下三个类别:

 
    1、返回可更新数据表的函数:如果用户定义函数包含单个 Select 语句且该语句可更新,则该函数返回的表格格式结果也可以更新。


    2、返回不可更新数据表的函数:如果用户定义函数包含不止一个 Select 语句,或包含一个不可更新的 Select 语句,则该函数返回的表格格式结果也不可更新。


    3、返回标量值的函数:用户定义函数可以返回标量值。


存储过程
   

    1. 功能强大,限制少
    2. 不能直接引用返回值
    3. 用select语句返回记录集

自定义函数


   1. 诸多限制,有许多语句不能使用,许多功能不能实现
   2. 可以直接引用返回值
   3. 用表变量返回记录集

 


 

标签: SQL相关
posted on 2010-03-17 09:27 酸甜西瓜 阅读(1835) 评论(12) 编辑 收藏

评论:
#1楼 2010-03-17 10:00 | heaiping      
不错,学习
 回复 引用 查看   
#2楼 2010-03-17 12:00 | Sunny Peng      
麻烦你转载也要发一下转载地址。
 回复 引用 查看   
#3楼[楼主] 2010-03-17 13:41 | 酸甜西瓜      
@Sunny Peng
呵呵,如果是转载的话,我当然会写上转载地址,但是这个的确是自己写的~

 回复 引用 查看   
#4楼 2010-03-17 14:01 | Sunny Peng      
那我就帮你找一篇和你一字不差的文章吧:
http://www.cnblogs.com/zhangzh/archive/2009/06/01/1493515.html

 回复 引用 查看   
#5楼 2010-03-17 14:05 | duncannjm      
嘿嘿,版权很重要哈。
楼主还是总结的比较精辟的。

 回复 引用 查看   
#6楼[楼主] 2010-03-17 14:07 | 酸甜西瓜      
@Sunny Peng
呵呵 的确是一样的,不过请看下面这个连接~
http://blog.csdn.net/guilin_gavin/archive/2008/12/16/3532459.aspx
这个也是我的博客~ 看看日期是不是比你给的那个连接要早呢?
因为上面写着是原创,所以我觉得当时自己应该是自己完成的,可能也参考了一些网上和书上的东西~ 因为时间太久了,所以记得不是太清楚了,如果是我转载的,我很愿意加上说明~

 回复 引用 查看   
#7楼 2010-03-17 17:08 | Mars.Chen      
顶一下
 回复 引用 查看   
#8楼 2010-03-17 17:20 | Forver      
依楼主的看法
为什么要存在自定义函数呢?

 回复 引用 查看   
#9楼 2010-03-17 17:21 | Forver      
这是为什么呢?
 回复 引用 查看   
#10楼[楼主] 2010-03-22 18:04 | 酸甜西瓜      
@Forver
个人浅见,数据库存储过程属于数据库级别的操作流程,数据库会在内部对存储过程进行更加高级的控制,目的在于处理一些带有一定逻辑的数据处理,而相对而言,数据库函数,尤其是带返回值的函数,就好比我们编写一个业务流程过程中,需要用到的很多通用的或特殊的处理函数一样,目的就是为了简化存储过程的代码量和复杂度,而且这也算是对数据库可编程性的一个方面体现,尤其是现在的数据库已经很好地支持我们开发的类库,其目的,也大多在于提供一些公共的基础处理函数,以方便我们开发复杂的业务流程~

 回复 引用 查看   
#11楼 2010-03-25 09:06 | chinese_submarine      
存储过程应该属于程序的概念,那么执行的时候是不是会生成一个进程呢?
 回复 引用 查看   
#12楼[楼主] 2010-03-29 10:44 | 酸甜西瓜      
@chinese_submarine
的确,数据库中应该由专门的进程负责处理存储过程的,我觉得应该不会单独来生成一个进程,因为那样反而变得不可控,而且容易出现更多的问题,为数据库的管理带来很大的压力和负担。

 回复 引用 查看   
昵称:酸甜西瓜
园龄:2年3个月
粉丝:21
关注:9
<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

搜索

 

常用链接

我的标签

随笔分类(94)

随笔档案(94)

积分与排名

  • 积分 - 125384
  • 排名 - 791

最新评论

阅读排行榜

评论排行榜

推荐排行榜