存储过程不是必需的,它只是一堆sql的集合,而且可以包含逻辑!
像一些简单的insert,update,delete没必要写存储过程的!直接写sql语句方便多了!
效率也不会差很多的!

解决方案 »

  1.   

    你问的什么意思啊?
    是指STORED PROCEDURE 还是TRIGGER?
      

  2.   

    知音啊,可是我看到大型软件的后台数据库近一半表多有insert,delete,update的stored procedure,例如
    CREATE PROCEDURE sdPgd_Insert
      @PGDSUPPLYCODE varchar(18),
      @PGDGOODSCODE varchar(18),
      @PGDCODE varchar(18),
      @PGDNAME varchar(20),
      @PGDPOT decimal(12,4),
      @PGDPOC decimal(12,4)
     AS
     Insert into sdPgd
     (
         PGDSUPPLYCODE,
         PGDGOODSCODE,
         PGDCODE,
         PGDNAME,
         PGDPOT,
         PGDPOC
     )
    values
     (
       @PGDSUPPLYCODE,
       @PGDGOODSCODE,
       @PGDCODE,
       @PGDNAME,
       @PGDPOT,
       @PGDPOC
     )
    GO
    根本没有底层的商业规则,有何意义呢?有大量的客户端的话,是不是效率高一点呢?
      

  3.   

    这种做法从业务逻辑上来讲没有意义。但是,从另外的角度看,就很有意义:1。安全性
      通过这样的方式,使得权限的管理变得比较方便:要让某个用户做某些事情,只要为其赋予相应的存储过程的执行权限即可。2。可维护性
      如果希望在每次增删改记录时,做某些事情,只要维护一次PROCEDURE即可。
      当然,利用TRIGGER也可达到类似的目的。不过,这种方式提供了更大的灵活性。
    能够见到这样的项目,并参与其中,应该说你很幸运!
      

  4.   

    存储过程和Sql语句的效果差异在于预先执行路径的确定和网络传递时数据量较小两方面
    像上面的语句如果说有区别,也就是在第一次执行时的过程有所不同:
    单一的insert语句在执行第一次时要解析,确定执行路径,也就是类似于源程序的编译,当然它编译成的是数据库本身可以直接执行的代码.
      

  5.   

    oldwain说的对,存储过程将针对表/视图操作的权限封闭起来,在不给最终用户权限的情况下可能正常访问表/视图,这一点和通过视图给最终用户赋权限一样.
    但第二点想和oldwain聊一下,我的感觉trigger在数据库中存储类似于存储过程,那么在其中包括insert sql语句还是insert存储过程没有区别,因为最终是做为一个整体进行优化存储的.使用存储过程封装全部应用我感觉有点对sp的能力高估了,当然性能上肯定不会降低,不过观念上有问题.
      

  6.   

    实际应用中存储过程应用的目的有多中,我认为主要有以下几点:
    1、封装应用。比如一个常用应用操作会引起一系列的后台数据变化,将这种变化封装起来,不但便于理解,也便于维护。这种目的的存储过程应该是最多的。
    2、对表的频繁操作。例如有个表字段特多,又经常通过INSERT语句插数据,你不可能到处去写内嵌SQL吧。所以就写个简单的INSERT表数据的存储过程,到处可以调用,简化代码,也增加代码的可读性。
    3、检测数据或做应用的判断。大概是PPZHAO兄说的CHECK吧。比如前台进行某一操作前必须进行一些判断,不可能去写一大堆SQL吧。SYBASE的存储过程可以有返回值,就写个存储过程。如果是ORACLE就改为FUNCTION了,通过返回值判断结果。
    4、得到一些序号。比如一些凭证的号码,要求唯一性,就可以在后台写一些脚本来实现。这也很长用的。
    5、分流作用。比如ORACLE的触发器是有行数限制的,代码长了什么办,只好写存储过程啊,在触发器中调用存储过程。
    小弟想到的就这几点,希望各位大侠批评指正。
      

  7.   

    我来补充两句:
    1:trigger 在维护数据一致性确实比较好,但是如果对一个表平凡的进行操作,很容易导致死锁,有其是那种锁机制解决不是很好的数据库象informix.sybase,尽量的在程序中少用trigger.
    2:在存储过程不要写得太长,存储过程潜逃调用,但是最好潜逃层数不能太深。
      

  8.   

    谢谢各位的捧场,大长见识
    通过对大型项目数据库的研究,我发现决大叔存储过程的目的是neptune1648(流浪的叶子)兄所说的1,2两点
      

  9.   

    再过两天给分,我觉得各位兄弟讲得多非常好。
    顺便问一下,写,调试存储过程有什么好的工具,我觉得sql server 2000在一个小小的框里写很不方便
      

  10.   

    这种问题我认为没有必要挣的喜欢就用!不喜欢就算!
    但是如果你要提高系统的速度!
    你的查询速度!等可以使用存储过程!
    其余的!我认为都可以再前台完成!我喜欢proc但是你也许不喜欢阿
      

  11.   

    存储过程的另一个用途:大型报表。计算需要进行一个小时以上的报表,如月末库存台帐,最好交给存储过程自己去玩。
    结束够存到数据库中。前台需要的时候到数据库去看结果。频繁调用的SQL事务当然非存储过程莫属:
    一个收银员每三分钟进行一次调用:输入商品,查找价格,计算价钱,划减库存,记录操作。
      

  12.   

    配合临时表和print语句可以实现一般的调试功能