邹老大的书提出的问题:什么时候应该使用存储过程?什么时候使用用户自定义函数?

时间:2022-03-21 09:41:35
完整的问题是:
什么时候应该使用存储过程?什么时候应该使用用户自定义函数?什么时候应该使用视图?什么时候应该直接使用Transact-SQL 语句??

谢谢大家。

15 个解决方案

#1


.......

#2


只有打好基础,不断练习,不断提高,才能做到随心所欲,应需而用.

#3


通常使用存储过程就差不多够了。

写涵数是为了重复,递归调用。

而视图,我觉得是需要的结果表是由很多表,很多字段关联得到的话,那就用视图。

其实用视图来设计结果表很不错,可以很容易的关联表,加别名,等等,不容易错,不会写一长串SQL不知道怎么修改。

另外我们现在跨服务器访问表,也得用视图。

#4


其实这个没有硬性的规定,能参照的标准就是你写的东西要实现什么功能,需要注意哪些方面的因素,再决定用什么方式来实现!
具体就是性能,效率,可重复利用性,安全,维护这个方面来抉择!所以打好基础很重要!

#5


直接查询的话,用Transact-SQL 语句就行了
视图其实就是已经写好的Transact-SQL 语句,什么时候用得根据你得需要,如果你需要连接的表比较的多,字段也比较多的话,可以考虑把它们连接好作为一个视图,下次查询时直接调用此视图就行了
用户自定义函数,可以看成一个普通函数,可以在Sql语句里面调用它们,具体什么时候使用根据自己需求而定,此非一句话就能讲清的。
存储过程主要是在你处理复杂逻辑时用的比较多,因为已经被数据库编译过了,所以调用它时比较快
总之,这些东西都非常基本,建议你多看看书,联系下就OK了

#6


引用楼主 conan304 的帖子:
完整的问题是: 
什么时候应该使用存储过程?什么时候应该使用用户自定义函数?什么时候应该使用视图?什么时候应该直接使用Transact-SQL 语句?? 

谢谢大家。

函数和存储过程基本上类似都是一段代码实现某个功能,不通的是函数必须要有返回值,而存储过程就不要。
视图是为了避免重复书冗长写复杂的查询语句而写成视图。
对于不复杂的语句就直接写sql语句了。

#7


什么时候应该使用存储过程?
个人认为添加、更新、删除、查询都可以用存储过程。

什么时候应该使用用户自定义函数?
尽量避免使用,数据量大时,自定义函数会很影响效率。
如果一定要使用,对数据分页后再用自定义函数处理。

什么时候应该使用视图?
由多表交叉取出来了常用的数据集。

什么时候应该直接使用Transact-SQL 语句??
没有复杂关系的简单查询。 

#8


当需要对某一个字段进行处理的时候,可以考虑使用函数,然后进行调用

#9


1,2问题是一组,3,4问题是另外一组。并不是4个问题一起比较。
什么时候应该使用存储过程?
处理复杂业务逻辑,包装一个功能模块
结果集可被业务层直接获得

什么时候应该使用用户自定义函数?
根据条件返回一个值或结果集,以供存储过程调用
重用性很高(比如字符串拆分或合并函数,汉字转简拼函数)


什么时候应该使用视图?
关联表太多
关联条件单纯
结果集重用性高

什么时候应该直接使用Transact-SQL 语句??
效率需求高
条件复杂
无太大重用性

#10


什么时候应该使用存储过程?
处理复杂业务逻辑,包装一个功能模块
结果集可被业务层直接获得

什么时候应该使用用户自定义函数?
根据条件返回一个值或结果集,以供存储过程调用
重用性很高(比如字符串拆分或合并函数,汉字转简拼函数)


什么时候应该使用视图?
关联表太多
关联条件单纯
结果集重用性高

什么时候应该直接使用Transact-SQL 语句??
效率需求高
条件复杂
无太大重用性

#11


添加、更新、删除操作涉及到多个表同时进行时使用存储过程;很少使用用户自定义函数;查询使用表较多罗列字段多时使用视图方便不一出错;简单查询直接用T_SQL

#12


引用 10 楼 szx1999 的回复:
什么时候应该使用存储过程? 
处理复杂业务逻辑,包装一个功能模块 
结果集可被业务层直接获得 

什么时候应该使用用户自定义函数? 
根据条件返回一个值或结果集,以供存储过程调用 
重用性很高(比如字符串拆分或合并函数,汉字转简拼函数) 


什么时候应该使用视图? 
关联表太多 
关联条件单纯 
结果集重用性高 

什么时候应该直接使用Transact-SQL 语句?? 
效率需求高 
条件复杂 
无太大重用性 

頂~

#13


http://topic.csdn.net/t/20051213/08/4455348.html

1 楼aw511(点点星灯)回复于 2005-12-13 08:50:35 得分 30
存储过程:   
  存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是   SQL   语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。   
  存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。     
  可以出于任何使用   SQL   语句的目的来使用存储过程,它具有以下优点:     
  1、可以在单个存储过程中执行一系列   SQL   语句。   
  2、可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。   
  3、存储过程在创建时即在服务器上进行编译,所以执行起来比单个   SQL   语句快。   
    
  用户定义函数:   
  Microsoft   SQL   Server   2000   允许创建用户定义函数。与任何函数一样,用户定义函数是可返回值的例程。根据所返回值的类型,每个用户定义函数可分成以下三个类别:     
  1、返回可更新数据表的函数     
  如果用户定义函数包含单个   SELECT   语句且该语句可更新,则该函数返回的表格格式结果也可以更新。   
  2、返回不可更新数据表的函数     
  如果用户定义函数包含不止一个   SELECT   语句,或包含一个不可更新的   SELECT   语句,则该函数返回的表格格式结果也不可更新。   
  3、返回标量值的函数     
  用户定义函数可以返回标量值

#14


aw511(点点星灯)回复于 2005-12-13 08:50:51 得分 0   
  存储进程                                                                     自定义函数       
  功能强大,先至少                                         诸多限制,有许多语句不能使用,许多功能不能实现       
  不能直接引用返回值                                 可以直接引用返回值       
  用select语句返回记录集                 用表变量返回记录集       
  ...       
  ...(期待高手)       
      
      
  总之,一个是过程,一个是函数。

aw511(点点星灯)回复于 2005-12-13 08:54:10 得分 10  
  总结:   
          第一:存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。   
          第二:存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因。     
          第三:存储过程运行比较稳定,不会有太多的错误。只要一次成功,以后都会按这个程序运行。     
          第四:存储过程主要是在服务器上运行,减少对客户机的压力。   
          第五:存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。   
          第六:存储过程可以在单个存储过程中执行一系列   SQL   语句。   
          第七:存储过程可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。 

#15


wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-13 12:45:21 得分 10
存储过程可以用临时表,函数不能用临时表   
存储过程可以使用Update,函数不能使用Update   
存储过程可以用Getdate()等函数,函数不能使用Getdate()这些函数

#1


.......

#2


只有打好基础,不断练习,不断提高,才能做到随心所欲,应需而用.

#3


通常使用存储过程就差不多够了。

写涵数是为了重复,递归调用。

而视图,我觉得是需要的结果表是由很多表,很多字段关联得到的话,那就用视图。

其实用视图来设计结果表很不错,可以很容易的关联表,加别名,等等,不容易错,不会写一长串SQL不知道怎么修改。

另外我们现在跨服务器访问表,也得用视图。

#4


其实这个没有硬性的规定,能参照的标准就是你写的东西要实现什么功能,需要注意哪些方面的因素,再决定用什么方式来实现!
具体就是性能,效率,可重复利用性,安全,维护这个方面来抉择!所以打好基础很重要!

#5


直接查询的话,用Transact-SQL 语句就行了
视图其实就是已经写好的Transact-SQL 语句,什么时候用得根据你得需要,如果你需要连接的表比较的多,字段也比较多的话,可以考虑把它们连接好作为一个视图,下次查询时直接调用此视图就行了
用户自定义函数,可以看成一个普通函数,可以在Sql语句里面调用它们,具体什么时候使用根据自己需求而定,此非一句话就能讲清的。
存储过程主要是在你处理复杂逻辑时用的比较多,因为已经被数据库编译过了,所以调用它时比较快
总之,这些东西都非常基本,建议你多看看书,联系下就OK了

#6


引用楼主 conan304 的帖子:
完整的问题是: 
什么时候应该使用存储过程?什么时候应该使用用户自定义函数?什么时候应该使用视图?什么时候应该直接使用Transact-SQL 语句?? 

谢谢大家。

函数和存储过程基本上类似都是一段代码实现某个功能,不通的是函数必须要有返回值,而存储过程就不要。
视图是为了避免重复书冗长写复杂的查询语句而写成视图。
对于不复杂的语句就直接写sql语句了。

#7


什么时候应该使用存储过程?
个人认为添加、更新、删除、查询都可以用存储过程。

什么时候应该使用用户自定义函数?
尽量避免使用,数据量大时,自定义函数会很影响效率。
如果一定要使用,对数据分页后再用自定义函数处理。

什么时候应该使用视图?
由多表交叉取出来了常用的数据集。

什么时候应该直接使用Transact-SQL 语句??
没有复杂关系的简单查询。 

#8


当需要对某一个字段进行处理的时候,可以考虑使用函数,然后进行调用

#9


1,2问题是一组,3,4问题是另外一组。并不是4个问题一起比较。
什么时候应该使用存储过程?
处理复杂业务逻辑,包装一个功能模块
结果集可被业务层直接获得

什么时候应该使用用户自定义函数?
根据条件返回一个值或结果集,以供存储过程调用
重用性很高(比如字符串拆分或合并函数,汉字转简拼函数)


什么时候应该使用视图?
关联表太多
关联条件单纯
结果集重用性高

什么时候应该直接使用Transact-SQL 语句??
效率需求高
条件复杂
无太大重用性

#10


什么时候应该使用存储过程?
处理复杂业务逻辑,包装一个功能模块
结果集可被业务层直接获得

什么时候应该使用用户自定义函数?
根据条件返回一个值或结果集,以供存储过程调用
重用性很高(比如字符串拆分或合并函数,汉字转简拼函数)


什么时候应该使用视图?
关联表太多
关联条件单纯
结果集重用性高

什么时候应该直接使用Transact-SQL 语句??
效率需求高
条件复杂
无太大重用性

#11


添加、更新、删除操作涉及到多个表同时进行时使用存储过程;很少使用用户自定义函数;查询使用表较多罗列字段多时使用视图方便不一出错;简单查询直接用T_SQL

#12


引用 10 楼 szx1999 的回复:
什么时候应该使用存储过程? 
处理复杂业务逻辑,包装一个功能模块 
结果集可被业务层直接获得 

什么时候应该使用用户自定义函数? 
根据条件返回一个值或结果集,以供存储过程调用 
重用性很高(比如字符串拆分或合并函数,汉字转简拼函数) 


什么时候应该使用视图? 
关联表太多 
关联条件单纯 
结果集重用性高 

什么时候应该直接使用Transact-SQL 语句?? 
效率需求高 
条件复杂 
无太大重用性 

頂~

#13


http://topic.csdn.net/t/20051213/08/4455348.html

1 楼aw511(点点星灯)回复于 2005-12-13 08:50:35 得分 30
存储过程:   
  存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是   SQL   语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。   
  存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。     
  可以出于任何使用   SQL   语句的目的来使用存储过程,它具有以下优点:     
  1、可以在单个存储过程中执行一系列   SQL   语句。   
  2、可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。   
  3、存储过程在创建时即在服务器上进行编译,所以执行起来比单个   SQL   语句快。   
    
  用户定义函数:   
  Microsoft   SQL   Server   2000   允许创建用户定义函数。与任何函数一样,用户定义函数是可返回值的例程。根据所返回值的类型,每个用户定义函数可分成以下三个类别:     
  1、返回可更新数据表的函数     
  如果用户定义函数包含单个   SELECT   语句且该语句可更新,则该函数返回的表格格式结果也可以更新。   
  2、返回不可更新数据表的函数     
  如果用户定义函数包含不止一个   SELECT   语句,或包含一个不可更新的   SELECT   语句,则该函数返回的表格格式结果也不可更新。   
  3、返回标量值的函数     
  用户定义函数可以返回标量值

#14


aw511(点点星灯)回复于 2005-12-13 08:50:51 得分 0   
  存储进程                                                                     自定义函数       
  功能强大,先至少                                         诸多限制,有许多语句不能使用,许多功能不能实现       
  不能直接引用返回值                                 可以直接引用返回值       
  用select语句返回记录集                 用表变量返回记录集       
  ...       
  ...(期待高手)       
      
      
  总之,一个是过程,一个是函数。

aw511(点点星灯)回复于 2005-12-13 08:54:10 得分 10  
  总结:   
          第一:存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。   
          第二:存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因。     
          第三:存储过程运行比较稳定,不会有太多的错误。只要一次成功,以后都会按这个程序运行。     
          第四:存储过程主要是在服务器上运行,减少对客户机的压力。   
          第五:存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。   
          第六:存储过程可以在单个存储过程中执行一系列   SQL   语句。   
          第七:存储过程可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。 

#15


wangtiecheng(不知不为过,不学就是错!)回复于 2005-12-13 12:45:21 得分 10
存储过程可以用临时表,函数不能用临时表   
存储过程可以使用Update,函数不能使用Update   
存储过程可以用Getdate()等函数,函数不能使用Getdate()这些函数