请问使用存储过程到底有什么坏处?在什么时候应该使用它,什么时候要避免使用它?(200分)

  • 主题发起人 主题发起人 puremoonstone
  • 开始时间 开始时间
P

puremoonstone

Unregistered / Unconfirmed
GUEST, unregistred user!
如题!
我看到很多三层结构的应用系统中都使用了存储过程,但又看到有人说使用了存储过程
会使系统难于移植,因此想知道什么时候该用,什么时候不用。如果不用,在N层系统中,
又该怎样访问数据库?
谢谢!
 
如果确定数据库服务器的类型(如sql server等),并不会改变,则使用存储过程!
存储过程是在数据库服务中运行的一段预编译程序(它只在第一次运行时编译)
如果不确定数据库服务器,或日后有可能更改数据库服务器,那么不用存储过程!
不同的数据库服务器的存储过程定义方法不同,所以才会'难于移植'

不用存储过程可直接用sql语句(存储过程也是sql语句的集合吗),呵呵!

参考,并非完全正确!
 
速度快!

可是个大数据库厂商之间的存储构成不兼容!
安全性。 没有中间层好(我猜!)


参考,并非完全正确!
 
储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称
存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
存储过程可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:
1.可以在单个存储过程中执行一系列 SQL 语句。
2.可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
3.存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。
至于缺点就是不方便移植,因为垄断跟竞争的关系,各大数据库厂商都用自己开发的语句和
函数,所以如果更换数据库平台,对存储过程的修改将会是巨大的工作量。
 
如果你写存储过程的话就要考虑可移植性了
因为对于不同的数据库,存储过程的语法都不一样的
所以,用了太多的存储过程就会使移植到别的数据库的难度大大加深
当然,如果你觉得你的系统就只跑在某一数据库下就够了,
或者你的开发团队有时间及精力在另一数据库上再开发实现相同功能的存储过程
那就放心大胆地用吧!
 
1、存储过程使用的好处是显而易见的,它实际上就是将过程编程的概念拿到了数据库中,让你可以
声明变量,逻辑控制等;另外它还可以降低网络里的数据流量;由于是预编译的,所以性能很好;
2、存储过程的劣势上面都说了,就是移植性问题;
3、此外,书写存储过程时还要注意,要谨慎使用游标,要注意资源的锁定,否则会引起整个系统的
性能降低的。
顺便给你送一个学习数据库理论的好网站吧:http://www.itpub.net 。
 
存储过程一般用来处理复杂的数据操作,它功能全面、运行效率高,优点显而易见。
缺点是不同类型的数据库对存储过程的约定不见相同,移植上会有一点问题,而且
存储过程的跟踪、调试和修改也受到系统数据库权限的限制。
所以对那些不太复杂的数据处理,一般使用QUERY来完成
 
那为了移植性好,你们一般怎么做?
 
为了移植性好你就只能牺牲性能以及一些数据库带来的便利了
比如只能标准SQL等,对于小系统可以这么做
对大型系统来说是不可能的! 这样的系统为了移植还不如专为各种数据库写一份存储过程。
 
密切关注并学习...
 
大家在开发中对移植性是怎样解决的呢?
 
同意xianjun的说法!
实际上我觉得用存储过程对于移植性来说是方便了,只是对于开发人员来说,要求是高了
许多,对于不同的数据库要写出各自的存储过程。在运行时确定该使用哪一套的调用接口。
这样当后台有部分变化时,可以只调整存储过程,而不用动应用软件系统。
 
同意楼上的
 

除了效率,
复杂的查询有的时候不是靠几条语句就是做到的,这个时候需要存储过程,
使用存储过程可以使个别程序员根本就不需要知道表的结构,减轻部分程序员的工作量

 
我用后台存储过程,
这样,当我有的表结构改变时,可以不用修改前台程序,特别是对于报表.
另外,当有适量的后台计算时,也可以用,这样可以减少网络数据量的传送.
 
to wellknow:后台存储过程是什么呀?
 
我来说说维护或者修改方面的吧!
有许多逻辑方面的都可以通过存储过程来实现,这样如果客户要变,或者程序本身
有问题,都可以不动前台,只要修改一下后台,即程储过程,就可以了,而且
维护还可以通过远程维护!而且改起来物方便,稳定性也好,速度就不用说了!
  以上是个人B见,也是实际中碰到的问题!
(以上针对SQL SERVER说的)
 
多人接受答案了。
 
后退
顶部