诸位大侠:  在书上看了一段代码,介绍了存储过程的创建及执行,如下:
===============================
with adoquery1 do 
 begin
  close;
  sql.add('create procedure '+edit1.text);///////////创建存储过程
  sql.add('as');
  sql.add('select k.学生编号,k.学生姓名,j.外语 from tb_stu as k inner join
  tb_ as  j  on k.学生编号=j.学生编号 where (((k.学生编号)=[j].[学生编号]))');
  execsql;
  sql.clear;
  sql.add('exec'+edit1.text);///////////执行存储过程
  open
end  
=======================================================================
思考良久,认为上面的数据功能完全可以用sql语句:  select k.学生编号,k.学生姓名,j.外语 from tb_stu as k inner join tb_ as  j  on k.学生编号=j.学生编号 where (((k.学生编号)=[j].[学生编号]))'
实现,何必去创建存储过程呢???
创建存储过程的意义在哪里呢?????
望诸位大侠解答,本人百思不得其解

解决方案 »

  1.   

    你可以把存储过程理解成dos下的批处理文件。
    如果你要实现比较复杂的业务逻辑,有N条SQL共同完成一个功能,存储过程的好处就体现出来了。
    否则的话,你得在客户端写N条SQL语句。而写成存储过程,只需要调用这个sp,传几个参数就可以了,对于客户端来说。还有,存储过程不光是把N条SQL语句简单地拼凑起来,而是预编译过的,所以执行速度比单独执行N条SQL语句快得多。
      

  2.   

    1.维护方便,如果你把所需要执行的操作代码写在程序当中,那么要做一些小修改,也要对程序做修改并重新编译,对于用户来讲,这个时候就需要对程序加以深度测试(你说只修改了一点点,但是用户不会为你的一句话而冒风险的),存储过程相对来讲就简单得多,毕业逻辑上分离出来了,即使要进行审核,成本也远比程序要低得多;
    2.重用性,一个设计好的存储过程,任何符合其输入和输出的程序都可以共用,同样也改善了维护工作,如果有10个程序要用到这个存储过程,那要做些修改,自然修改一个存储过程所花费的成本比程序要低得多;
    3.分工的明确化.存储过程如果设计得当,就可以通过一个中间的适配器(Adapter)来调用,如此在将来进行数据库的迁移等,就可以把相应的工作交给具体的熟悉相关数据库等业务的人员,而不是所有的开发人员都要进行了解.就好比MSSQL/Oracle/DB2类似的,如果数据库操作脚本写在程序当中,那么迁移的工作量将会是所有可能的程序.如果是通过存储过程,那就可以交给相应的DBA等来完成;
    4.存储过程的预编译,可能性使得语句的执行更优化,特别是对于类似Oracle等具备某些高级优化能力的,那么包括其既定的执行计划等可以带来相当的性能提升;
    5.对于需要多次访问数据的复杂操作.如果写在程序当中,那么就需要不断的或者大量的提取数据库当中的数据到程序当中进行运算,而如果是使用存储过程,那么就减少了应用程序与数据库的交互次数,如此的消耗明显要低得多.
      

  3.   

    还有就是维护方便,如果写SQL语句要修改就必修修改原文件,而存储过程修改后所有的客户端都可以更新.
      

  4.   

    优点:     
        1.减少网络传输,节约时间   
        2.速度快   
        3.出错的概率小   
        4.可利用服务器的一些特殊的资源   
    缺点:     
        1.交互性差   
        2.不够灵活   
        3.商业逻辑层与数据库在一起,不易移植.
    附:
       存储过程有个致命的缺点:就是可能如果要更换数据库(比如:从sql   server到oracle)的话,你的存储过程就都要重写了。所以它过分依赖数据库端,假如你要做一个工程,是可以的,但是如果你要做一个产品,或者以后可能经还会用到这个工程的代码的话,建议少使用。所以任何一种开发方法总有优缺点,不要过分依赖
      

  5.   

    存储过程是在数据库服务器上运行的,而用SQL语句在本地写,则需要和服务器进行交互
      

  6.   

     我的感觉就是:最实用的地方就是多个查询语句,一次性执行完。写SQL,则要多次。
      

  7.   

    针对楼主的一句sql,存储过程也就是维护起来方便