单个语句HOLDLOCK

时间:2017-04-26 10:20:02

标签: locking sybase-ase

我在Sybase中有一些遗留代码,并且有一个包含HOLDLOCK的语句。由于这些保持锁定,有时会发生死锁。所以我想摆脱持有锁。同时,我没有得到保持锁定语句的目的,我猜我是否可以删除保持锁定,一切都会好的。

声明

Insert into #temptable
Select
T2.field1,
T1.field1,
T1.field2
From T1 HOLDLOCK
join T2 on T1.field3 = T2.field3
Where some_conditions
Union
Select
T2.field1,
T1.field1,
T1.field2
From T1 HOLDLOCK
join T2 on T1.field3 = T2.field3
Where some_other_conditions

当此代码运行时,可以同时运行一些更新并插入T1的其他代码。

当我在文档中读到关于保持锁定时,它表示隔离级别3或HOLDLOCK可防止幻像行或幻像更新。当有一个多语句事务需要在数据页上保持锁定时,两个语句之间的数据页面就不会发生变化。

但是这里有一个交易,我没有得到HOLDLOCK试图克服的内容。

也许UNION在这里有机会从一个表中读取同一行的两个版本?

0 个答案:

没有答案