【发布时间】:2011-06-20 09:11:21
【问题描述】:
谁能告诉我为什么给定存储过程中的以下语句会返回重复的结果,即使第一条SELECT语句使用的行被锁定?
BEGIN TRANSACTION
DECLARE @Temp TABLE ( ID INT )
INSERT INTO @Temp SELECT ID FROM SomeTable WITH (ROWLOCK, UPDLOCK, READPAST) WHERE SomeValue <= 10
INSERT INTO @Temp SELECT ID FROM SomeTable WITH (ROWLOCK, UPDLOCK, READPAST) WHERE SomeValue >= 5
SELECT * FROM @Temp
COMMIT TRANSACTION
SomeTable 中 SomeValue 介于 5 和 10 之间的任何值都将返回两次,即使它们被锁定在第一个 SELECT 中。我认为整个事务的锁都到位了,所以我没想到查询会返回重复的结果。为什么会这样?
【问题讨论】: