set xact_abort on
BEGIN TRANSACTIONupdate a set a1='100' where id=1select * from b
COMMIT TRANSACTION

解决方案 »

  1.   

    To:LoveSQL(GG),不行啊,还是没有回滚
      

  2.   

    应该是这么理解的,select不到一个表造成了致命性错误,从@@trancount中可以看出该事物还是存在的,和其他会造成错误的sql语句有些不同,不属于xact_abort的适用范围
    应该用的是判断表是否存在,再执行不同的命令set xact_abort on
    begin tran
    update a set a1 = '100' where id=1
    IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE id = object_id(N'[dbo].[b]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    rollback tran
    Else
    commit transet xact_abort off
      

  3.   

    To: cloudchen(陈系上.net) ,请问事务是建立在连接上的,那在存储过程中,能否实现跨库的事务处理