如果这条语句出现在事务中,该事务一定rollback.
如果这条语句出现在批中,只有该语句无法执行.

解决方案 »

  1.   

    不会ROLLBACK
    if @@error<>0
        return
    来退出事务执行!
      

  2.   

    如果前面有begin transaction的话,应该用
    If @@error<>0
        begin
            rollback transaction
            return
        end
      

  3.   

    SQLServer有没有设置可以自动回卷的?
      

  4.   

    SET XACT_ABORT
    指定当 Transact-SQL 语句产生运行时错误时,Microsoft&reg; SQL Server&#8482; 是否自动回滚当前事务。
      

  5.   

    举例:
    CREATE TABLE t1 (a int PRIMARY KEY)
    CREATE TABLE t2 (a int REFERENCES t1(a))
    GO
    INSERT INTO t1 VALUES (1)
    INSERT INTO t1 VALUES (3)
    INSERT INTO t1 VALUES (4)
    INSERT INTO t1 VALUES (6)
    GO
    SET XACT_ABORT OFF
    GO
    BEGIN TRAN
    INSERT INTO t2 VALUES (1)
    INSERT INTO t2 VALUES (2) /* Foreign key error */
    INSERT INTO t2 VALUES (3)
    COMMIT TRAN
    GOSET XACT_ABORT ON
    GOBEGIN TRAN
    INSERT INTO t2 VALUES (4)
    INSERT INTO t2 VALUES (5) /* Foreign key error */
    INSERT INTO t2 VALUES (6)
    COMMIT TRAN
    GO/* Select shows only keys 1 and 3 added. 
       Key 2 insert failed and was rolled back, but
       XACT_ABORT was OFF and rest of transaction
       succeeded.
       Key 5 insert error with XACT_ABORT ON caused
       all of the second transaction to roll back. */SELECT * 
    FROM t2
    GODROP TABLE t2
    DROP TABLE t1
    GO