首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

【100分】还是SQL语句优化的有关问题!

2012-03-24 
【100分】还是SQL语句优化的问题!!!!!!!如下这个多次嵌套的语句,个人觉得有很多问题,想用GOTO命令进行简化,

【100分】还是SQL语句优化的问题!!!!!!!
如下这个多次嵌套的语句,
个人觉得有很多问题,
想用GOTO命令进行简化,
又有些担心,
麻烦各位SQL高手给出更好的优化方案

SQL code
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;


[解决办法]
SQL code
rollback;return;--return后就不会执行后面的代码了
[解决办法]
SQL code
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的?
[解决办法]
SQL code
--我简单模拟一下--先定义一个表变量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*/ 

热点排行