BEGIN TRANSACTION
 INSERT INTO [dbo].[Vip_Card] (CardName)VALUES(@CardName)
 DECLARE iFlag int
 SET iFlag=-1
 IF 条件
   SET @iFLag=1
 ELSE 条件
   SET @iFlag=1
IF @@error<>0 AND @iFlag=-1
BEGIN
   ROLLBACK TRANSACTION
END
ELSE
BEGIN
   COMMIT TRANSACTION
END
为什么当@iFlag=-1的时候,还是会插入Vip_Card呢?而不执行回滚?

解决方案 »

  1.   

    不用判断@@error的值BEGIN TRANSACTION
     INSERT INTO [dbo].[Vip_Card] (CardName)VALUES(@CardName)
     DECLARE iFlag int
     SET iFlag=-1
     IF 条件
      SET @iFLag=1
     ELSE 条件
      SET @iFlag=1
    IF @iFlag=-1
    BEGIN
      ROLLBACK TRANSACTION
    END
    ELSE
    BEGIN
      COMMIT TRANSACTION
    END
      

  2.   

    BEGIN TRANSACTION
    DECLARE @err int,@iFlag INT
    INSERT INTO [dbo].[Vip_Card]( CardName ) VALUES( @CardName )
    SET @err=@@error

    SET @iFlag = -1
    IF 条件
    SET @iFLag = 1
    ELSE 条件
    SET @iFlag = 1 IF @err<>0 AND @iFlag=-1
    BEGIN
        ROLLBACK TRANSACTION
    END
    ELSE 
    BEGIN
        COMMIT TRANSACTION
    END