Het is niet genoeg om een serialiseerbare transactie te hebben, u moet een hint geven over de vergrendeling om dit te laten werken.
Het serialiseerbare isolatieniveau krijgt meestal nog steeds het "zwakste" type vergrendeling dat het kan, dat ervoor zorgt dat aan de serialiseerbare voorwaarden wordt voldaan (herhaalbare uitlezingen, geen fantoomrijen, enz.)
U grijpt dus een gedeeld slot op uw tafel dat u later (in uw serialiseerbare transactie) probeert te upgraden naar een updatevergrendeling. De upgrade zal mislukken als een andere thread de gedeelde vergrendeling vasthoudt (het zal werken als er geen instantie is die een gedeelde vergrendeling vasthoudt).
U wilt het waarschijnlijk als volgt wijzigen:
SELECT * FROM SessionTest with (updlock) WHERE SessionId = @SessionId
Dat zorgt ervoor dat een updatevergrendeling wordt verkregen wanneer de SELECT wordt uitgevoerd (u hoeft de vergrendeling dus niet te upgraden).