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

Получете заключване на таблица за актуализиране при стартиране на съхранена процедура в SQL Server

Ти каза:

Просто се нуждаете от споделена ключалка за четене за продължителността на TXN. Това означава, че никой друг процес не може да получи заключване "запис" във връзка с TABLOCK. И не се нуждаете от COUNT.

...
   BEGIN TRANSANCTION
     SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
...

Защо мислите, че искате ЗАКЛЮЧВАНЕ НА АКТУАЛИЗАЦИЯ?

HOLDLOCK или SERIALIZABLE

Редактиране след коментар:

  • „изключително заключване“ означава „само един процес, използващ данните“.
  • „СЕРИАЛИЗУЕМО“ основно означава задържане на ключалките (споделени, ексклузивни, каквото и да е) за много по-дълго време.

Не можете да посочите "изключително заключване" и позволи на други процеси да четат. Понятията се изключват взаимно. Искате да предотвратите записи в цялата таблица, които продължават заключване споделено/четене ще свърши работа. Тук се появява SERIALIZABLE.

От „Режими на заключване“

Така че:споделеното заключване забранява записите и може да бъде накарано да продължи, като го направите СЕРИАЛИЗУЕМО



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализиране на ред в таблица въз основа на подзаявка на същата таблица

  2. Агрегатът може да не се появи в списъка с набори на оператор UPDATE. Ако актуализирате с имена на колони

  3. Създаване на съставен външен ключ в SQL Server 2008

  4. Грешка при изпускане на индекс в база данни на SQL Azure:Неправилен синтаксис близо до ключовата дума „ON“ (потребителски контекст =dbo)

  5. Как да вмъкна байт[] в колона VARBINARY на SQL сървър