本帖最后由 zhouxiaobo123 于 2009-09-16 12:59:01 编辑

解决方案 »

  1.   

     CREATE PROC TEST
      AS
      BEGIN transaction
    BEGIN
      EXEC('语句1')
      EXEC('语句2')
      EXEC('语句3')
      EXEC('语句4')
    END
      IF @@ERROR<>0
      BEGIN 
      ROLLBACK transaction
      END
      ELSE
      BEGIN
      COMMIT transaction
      END
     GO
      

  2.   


    CREATE PROC TEST
      AS
      DECLARE @ERROR INT
      SET @ERROR = 0
      BEGIN TRANSCATION
      EXEC('语句1')
      IF @@ERROR<>0 
          @ERROR = @@ERROR
      EXEC('语句2')
      IF @@ERROR<>0 
          @ERROR = @@ERROR
      EXEC('语句3')
      IF @@ERROR<>0 
          @ERROR = @@ERROR
      EXEC('语句4')
      IF @@ERROR<>0 
          @ERROR = @@ERROR
      IF @ERROR<>0
      BEGIN 
      ROLLBACK TRANSCATION
      END
      ELSE
      BEING
      COMMIT TRANSCATION 
      END
      

  3.   

    TONY哥,用BEGIN END 放在一起错误号好像还是最后那个的为准吧
      

  4.   

    我的回答是错的.@@ERROR是每个语句执行完返回的,
    BEGIN END 放在一起错误号好像还是最后那个的为准没错.
      

  5.   


    CREATE TABLE TEST(TIME DATE)
    BEGIN TRANSACTION 
    BEGIN
    EXEC('INSERT INTO TEST VALUES(GETDATE())')
    EXEC('INSERT INTO TEST VALUES(GETDATE())')
    EXEC('INSERT INTO TEST VALUES(''SSS'')')
    END
    IF @@ERROR<>0
    BEGIN
    ROLLBACK TRANSACTION
    END
    ELSE
    BEGIN
    COMMIT TRANSACTION
    END
    BEGIN TRANSACTION 
    BEGIN
    EXEC('INSERT INTO TEST VALUES(GETDATE())')
    EXEC('INSERT INTO TEST VALUES(''SSS'')')
    EXEC('INSERT INTO TEST VALUES(GETDATE())')
    END
    IF @@ERROR<>0
    BEGIN
    ROLLBACK TRANSACTION
    END
    ELSE
    BEGIN
    COMMIT TRANSACTION
    END测试放在 begin 和 end 中可以啊