Nestačí mít serializovatelnou transakci, musíte naznačit zamykání, aby to fungovalo.
Úroveň serializovatelné izolace bude stále obvykle získávat „nejslabší“ typ zámku, který může zajistit, že budou splněny podmínky pro serializaci (opakovatelné čtení, žádné fantomové řádky atd.)
Získáváte tedy sdílený zámek na vašem stole, který se později (ve své serializovatelné transakci) pokoušíte upgradovat na zámek aktualizace. Upgrade se nezdaří, pokud sdílený zámek drží jiné vlákno (bude fungovat, pokud žádné jiné tělo drží sdílený zámek).
Pravděpodobně jej budete chtít změnit na následující:
SELECT * FROM SessionTest with (updlock) WHERE SessionId = @SessionId
To zajistí, že při provedení SELECT bude získán aktualizační zámek (takže nebudete muset aktualizovat zámek).