Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Застой при ИЗБЕРЕТЕ/АКТУАЛИЗИРАНЕ

Не е достатъчно да имате транзакция, която може да бъде сериализирана, трябва да намекнете за заключването, за да работи това.

Сериализиращото се ниво на изолация все пак обикновено ще придобие „най-слабия“ тип заключване, което може, което гарантира, че сериализиращите се условия са изпълнени (повтарящи се четения, без фантомни редове и т.н.)

И така, вие хващате споделена ключалка на вашата маса, която по-късно (във вашата сериализируема транзакция) се опитвате да надстроите до заключване за актуализиране. Надграждането ще се провали, ако друга нишка държи споделеното заключване (ще работи, ако друго тяло не държи споделено заключване).

Вероятно искате да го промените на следното:

SELECT * FROM SessionTest with (updlock) WHERE SessionId = @SessionId

Това ще гарантира получаването на заключване за актуализиране, когато се извърши SELECT (така че няма да е необходимо да надграждате заключването).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавете WHERE клаузи към SQL динамично / програмно

  2. Заявка в множество бази данни на един и същ сървър

  3. Как работи функцията SPACE() в SQL Server (T-SQL)

  4. Отложена издръжливост в SQL Server 2014

  5. За да намерите следващия работен ден