是否有一个替代UPDLOCK与NOWAIT使事务可以提交?

时间:2016-09-27 11:41:39

标签: java sql-server jdbc transactions locking

鉴于以下内容:

SQL Server中的数据库对象:

create table t (c int);

create table t2 (c int);

create table t3 (c int);

create table t4 (c int);

create trigger tr on t after update as begin
  update t2 set c = c;
end;

create trigger tr2 on t2 after update as begin
  begin try
    insert into t4 values (1);
    select null from t3 with (updlock, nowait);
  end try
  begin catch
    -- How to recover if t3 can't be locked?
  end catch;
end;

同时运行的Java程序:

  1. 以与上述t3相同的方式锁定tr2的P1,但在终止之前不会放弃锁定。
  2. 更新t
  3. 的P2

    P2似乎无声地失败(即没有SQLException s),但没关系。更重要的是,由于tt4的锁定失败,因此t3tr2未进行任何更改。我试图在锁定之前创建一个保存点,但回滚到catch子句中的保存点也失败了。看起来锁定失败导致交易成为uncommittable。有没有什么方法可以在保留迄今所做的更改的同时从中恢复?或者,UPDLOCK NOWAIT是否有替代iframe不会导致交易无法承受?

0 个答案:

没有答案