Det räcker inte med att ha en serialiserbar transaktion, du måste tipsa om låsningen för att detta ska fungera.
Den serialiserbara isoleringsnivån kommer fortfarande vanligtvis att få den "svagaste" typen av lås den kan, vilket säkerställer att de serialiserbara villkoren är uppfyllda (upprepningsbara läsningar, inga fantomrader etc)
Så du tar tag i ett delat lås på ditt bord som du senare (i din serialiserbara transaktion) försöker uppgradera till ett uppdateringslås. Uppgraderingen kommer att misslyckas om en annan tråd håller det delade låset (det fungerar om ingen annan har ett delat lås).
Du vill förmodligen ändra det till följande:
SELECT * FROM SessionTest with (updlock) WHERE SessionId = @SessionId
Det kommer att säkerställa att ett uppdateringslås förvärvas när SELECT utförs (så att du inte behöver uppgradera låset).