存储过程明明是为"数据完整性"服务的,为什么要有REturn呢?return可以从查询或过程中无条件退出.可是当return退出后,在return之前的语句执行了并没有回滚回来,这不就不保证,"存储过程"作为一个操作单元执行了吗?要么成功全部执行SQL语名;要么失败,所有语句都不执行.???为什么要有return呢?

解决方案 »

  1.   

    不一定所有存储过程都要用return,如果你想让所有语句中某条不成功其余全部回滚,应该使用事务控制.
      

  2.   

    建议楼主不要仅仅从字面上去理解,return不是乱用的,得符合业务逻辑才行。
    象你说的:要么成功全部执行SQL语名;要么失败,所有语句都不执行,这肯定要用到事务,如果成功了,那肯定是
    commit tran 然后returun ;如果失败的话,肯定要rollback tran,然后return.
      

  3.   

    两位楼上的朋友,我没有说事务,我是说在"存储过程"中的return,它不是破坏存储过程了完整性了吗
      

  4.   


    你从哪本书看书看的,说存储过程是原子性的。ACID
    只要不声明begin tran 就单独执行各自的。
    比如存储过程里面有两个更新语句。
    有可能一句执行,一句失败。
      

  5.   

    假如在一个存储过程中有
    insert into table1 (id) values (1) --这是对的(A)
    insert into table1 (id) values ('abc')---这是错的(B)
    insert into table1 (id) values (3) --这个就不会再执行了,对不,而(A)是被执行了,并且没有被回滚是不?我没说错哦?这不是原子操作吗?
      

  6.   

    假如在一个存储过程中有 
    insert into table1 (id) values (1) --这是对的(A) 
    insert into table1 (id) values ('abc')---这是错的(B) 
    insert into table1 (id) values (3) --这个就不会再执行了,对不,而(A)是被执行了,并且没有被回滚是不? 我没说错哦?这不是原子操作吗? 
    ----------------
    如果存储过程执行出错时,
    公用变量@@errorno会<>0
    如果是启动了事务
    可用以下语句回滚
    exec 存储过程
    if @@error<>0 --执行失败时回滚
      rollback tran
      

  7.   

    基本上,基于过程的语言都有return的功能
    其实return相应于goto到结束goto l1......
    语句...
    语句....
    l1: --结束
      

  8.   

    楼主可以这样来看下这两者的区别:
    create proc p1  --没有使用事务
    asinsert into table1 (id) values (1) 
    insert into table1 (id) values ('abc')
    insert into table1 (id) values (3) --
    create proc p2  --使用了事务
    as
    begin tran 
    insert into table1 (id) values (1) 
    insert into table1 (id) values ('abc')
    insert into table1 (id) values (3) 
    commit tran两者的区别是第一个存储过程的第一个insert语句是可以被执行的,也就是说能够向数据库插入一条数据,而第二个是不能插入的。
    所以第一个存储过程并不是楼主所理解的原子操作。而是因为当执行insert into table1 (id) values ('abc')的时候出错,那么整个存储过程就跳出了,终止了存储过程的执行。但是第一条已经执行了,是不撤销的。
    原子操作是里面的操作要么全部执行,要么一个都不执行,所以存储过程如果不声明为事务的话,不是一个原子操作。
      

  9.   

    存储过程不加事务的话还用return么
      

  10.   

    存储过程就是SQL的一种编程,你觉得程序里会没用return嘛?return是控制程序的。数据完整性是事务的一种特性,要么提交,要么回滚。