0
誰でも、最初のSELECT
ステートメントで使用される行のロックでも、指定されたストアドプロシージャ内の次のステートメントが繰り返しの結果を返すのはなぜですか?SQL Server 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
SomeValue
は5と10の間であるためSomeTable
内の任意の値は、それらが最初SELECT
にロックしたとしても、二回返されます。トランザクション全体でロックがかかっていると思っていましたので、クエリが繰り返し結果を返すことは期待していませんでした。なぜこうなった?