2011-06-20 65 views
0

谁能告诉我为什么不使用的第一SELECT语句中,即使在锁行给定存储过程返回结果重复下面的语句?奇怪的锁定行为2005

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。我认为整个交易都有锁,所以我不希望查询返回重复的结果。这是为什么发生?

回答