.........
declare @numErr numeric(12,2)
set @numErr=0
begin tran
.................
...........
if @i<>@count  --怎样实现在这个事物里,如果这个判断条件满足,就不执行下面的语句,直接回滚上面的语句
 return
................
...............
set @numErr=@@error 
if @numErr=0 
begin 
commit tran
 return 1
end
else
begin
 
rollback tran   
 return 0end

解决方案 »

  1.   

    if @i<>@count  --怎样实现在这个事物里,如果这个判断条件满足,就不执行下面的语句,直接回滚上面的语句
    begin
     rollback tran
     return
    end
      

  2.   

    原存储过程是这样的,从tab_1给一个用户分配他所需要的卡数
    如果操作成功,修改用户的状态
    否则,回滚tab_1,将分配的卡数还原
     .........
    declare @numErr numeric(12,2)
    set @numErr=0
    begin tran
    update top (@count) tab_1 set mobile=@mobile
    select @i=count(1) from tab_1 where mobile=@mobileif @i<>@count  --怎样实现在这个事物里,如果这个判断条件满足,就不执行下面的语句,直接回滚上面的语句
     rollback tran
     select 0
    update tab_status set [status]=1 where mobile=@mobile
     
    set @numErr=@@error 
    if @numErr=0 
    begin 
    commit tran
     return 1
    end
    else
    begin
     
    rollback tran   
     return 0end
    可是当@i<>@count---下面的update tab_status set [status]=1 where mobile=@mobile
    有时候还是被执行了
      

  3.   

    return 从查询或过程中无条件退出。RETURN 的执行是即时且完全的,可在任何时候用于从过程、批处理或语句块中退出。RETURN 之后的语句是不执行的。 
      

  4.   

    if @i<>@count
     return 1
      

  5.   

    谢谢  如果用return , 我需要它回滚--怎么回滚之前的操作呢
     因为之前的update top (@count) tab_1 set mobile=@mobile
    若果本次操作失败,这句必须回滚
      

  6.   

    if @i<>@count --怎样实现在这个事物里,如果这个判断条件满足,就不执行下面的语句,直接回滚上面的语句
    begin
     
    rollback tran   
     return 0end
      

  7.   

    可是 
    if @i<>@count --怎样实现在这个事物里,如果这个判断条件满足,就不执行下面的语句,直接回滚上面的语句
    begin
     
    rollback tran   
     return 0end有时候 出现失败的情况
      

  8.   

    失败时指出现语法或者数据错误吗?那就得用
    BEGIN TRY
       BEGIN TRANSACTION;
    ...........
     COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        SELECT
            ERROR_NUMBER() as ErrorNumber,
            ERROR_MESSAGE() as ErrorMessage;
        ...........    IF (XACT_STATE()) = -1
        BEGIN
            PRINT
                N'The transaction is in an uncommittable state. ' +
                'Rolling back transaction.'
            ROLLBACK TRANSACTION;    END;    -- Test if the transaction is active and valid.
        IF (XACT_STATE()) = 1
        BEGIN
    --        PRINT
    --            N'The transaction is committable. ' +
    --            'Committing transaction.'
            COMMIT TRANSACTION;   
        END;
    END CATCH;