日期:2014-05-18 浏览次数:20632 次
begin tran
... ...--执行语句
select @ok = @@ROWCOUNT 
if @ok=0 
    rollback;
else
    begin
        ... ...--执行语句
        select @ok = @@ROWCOUNT
        if @ok=0
            rollback;
        else
            begin
                ... ...--执行语句
                select @ok = @@ROWCOUNT
                if @ok=0
                    rollback;
                else
                    begin
                        ... ...--执行语句
                        select @ok = @@ROWCOUNT
                        if @ok=0
                            rollback;
                        else
                            begin
                                ... ...--执行语句
                                select @ok = @@ROWCOUNT
                                if @ok=0
                                    rollback;
                                else
                                    begin
                                        ... ...--执行语句
                                        select @ok = @@ROWCOUNT
                                        if @ok=0
                                            rollback;
                                        else
                                            begin
                                                if (@isBackCard = 1)
                                                    begin
                                                        if(@type='0')
                                                            begin
                                                                ... ...--执行语句
                                                                select @ok = @@ROWCOUNT
                                                                if @ok=0
                                                                    rollback;
                                                            end
                                                    end
                                            end
                                    end
                            end
                    end
            end
    end
if @@error > 0
    rollback;
else
    commit;
rollback; return; --return后就不会执行后面的代码了
------解决方案--------------------
begin tran
... ...--执行语句
if @@ROWCOUNT=0 
begin
    rollback
    return
end 
... ...--执行语句
if @@ROWCOUNT=0 
begin
    rollback
    return
end 
... ...--执行语句
if @@ROWCOUNT=0 
begin
    rollback
    return
end 
... ...--执行语句
if @@ROWCOUNT=0 
begin
    rollback
    return
end 
... ...--执行语句
if (@isBackCard = 1)
    if(@type='0')
    begin
         ... ...--执行语句
        if @@ROWCOUNT=0
        begin
            rollback
            return
        end
     end
if @@error > 0
    rollback;
else
    commit;
------解决方案--------------------
楼主的代码只是逻辑有点乱,不方便维护和修改.
至于执行和性能应该没问题.
------解决方案--------------------
我怎么感觉写这代码的人是按照面向过程的思路来写SQL的?
------解决方案--------------------
--我简单模拟一下
--先定义一个表变量
declare @t table(id int)
begin tran
insert into @t select 1 --执行语句1
if @@rowcount=0 
rollback;
else
    begin
    insert into @t select 2 --执行语句2
    if @@rowcount=0 
    Rollback Tran;
    insert into @t select 3 --执行语句3
    if @@rowcount=0 
    Rollback Tran;
    insert into @t select 4 where 1<>1 --执行语句4
    if @@rowcount=0 
    Rollback Tran;
    insert into @t select 5 --执行语句5
    if @@rowcount=0 
    Rollback Tran;
    insert into @t select 6 --执行语句6
    if @@rowcount=0 
    Rollback Tran;
    declare @isB