【100分】还是SQL语句优化的问题!!!!!!!
如下这个多次嵌套的语句,
个人觉得有很多问题,
想用GOTO命令进行简化,
又有些担心,
麻烦各位SQL高手给出更好的优化方案
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 endif @@error > 0 rollback;else commit;
rollback;return;--return后就不会执行后面的代码了
[解决办法]
begin tran... ...--执行语句if @@ROWCOUNT=0 begin rollback returnend ... ...--执行语句if @@ROWCOUNT=0 begin rollback returnend ... ...--执行语句if @@ROWCOUNT=0 begin rollback returnend ... ...--执行语句if @@ROWCOUNT=0 begin rollback returnend ... ...--执行语句if (@isBackCard = 1) if(@type='0') begin ... ...--执行语句 if @@ROWCOUNT=0 begin rollback return end endif @@error > 0 rollback;else commit;
[解决办法]
楼主的代码只是逻辑有点乱,不方便维护和修改.
至于执行和性能应该没问题.
[解决办法]
我怎么感觉写这代码的人是按照面向过程的思路来写SQL的?
[解决办法]
--我简单模拟一下--先定义一个表变量declare @t table(id int)begin traninsert into @t select 1 --执行语句1if @@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 @isBackCard int set @isBackCard=1 declare @type varchar(4) set @type='0' if (@isBackCard = 1 and @type='0') begin insert into @t select 7 --执行语句7 if @@rowcount=0 Rollback Tran; endendselect * from @t/*id-----------123567*/