不好意思,第一个应是这样
while(条件)
begin
begin tran
    do something
commit tran
endbegin tran
   do something
commit tran
此时第二事务不会执行

解决方案 »

  1.   

    while(条件)
    begin
       begin tran
       --do something
       ------------------------------------------------1
       commit tran
    end
    begin tran
       do something
      ---------------------------------------------------2
    commit tran
    1中出错是否有return如果有,2肯定不执行了!你可以用goto语句或者别的
      

  2.   

    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
    SET XACT_ABORT ON
    GO
    declare @i int
    set @i=0
    while(@i<3)
    begin
    begin tran
         INSERT INTO t1 VALUES (1)
    commit tran
    set @i=@i+1
    endBEGIN TRAN
    INSERT INTO t2 VALUES (4)
    COMMIT TRANSELECT * 
    FROM t2
    GODROP TABLE t2
    DROP TABLE t1
    GO
    -------------------------
    SET XACT_ABORT ON时
    t2表为空
    SET XACT_ABORT OFF时
    t2表插入了记录4
      

  3.   

    帮助中的例子原型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