Не е достатъчно да имате транзакция, която може да бъде сериализирана, трябва да намекнете за заключването, за да работи това.
Сериализиращото се ниво на изолация все пак обикновено ще придобие „най-слабия“ тип заключване, което може, което гарантира, че сериализиращите се условия са изпълнени (повтарящи се четения, без фантомни редове и т.н.)
И така, вие хващате споделена ключалка на вашата маса, която по-късно (във вашата сериализируема транзакция) се опитвате да надстроите до заключване за актуализиране. Надграждането ще се провали, ако друга нишка държи споделеното заключване (ще работи, ако друго тяло не държи споделено заключване).
Вероятно искате да го промените на следното:
SELECT * FROM SessionTest with (updlock) WHERE SessionId = @SessionId
Това ще гарантира получаването на заключване за актуализиране, когато се извърши SELECT (така че няма да е необходимо да надграждате заключването).