Ти каза:
Просто се нуждаете от споделена ключалка за четене за продължителността на TXN. Това означава, че никой друг процес не може да получи заключване "запис" във връзка с TABLOCK. И не се нуждаете от COUNT.
...
BEGIN TRANSANCTION
SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
...
Защо мислите, че искате ЗАКЛЮЧВАНЕ НА АКТУАЛИЗАЦИЯ?
Редактиране след коментар:
- „изключително заключване“ означава „само един процес, използващ данните“.
- „СЕРИАЛИЗУЕМО“ основно означава задържане на ключалките (споделени, ексклузивни, каквото и да е) за много по-дълго време.
Не можете да посочите "изключително заключване" и позволи на други процеси да четат. Понятията се изключват взаимно. Искате да предотвратите записи в цялата таблица, които продължават заключване споделено/четене ще свърши работа. Тук се появява SERIALIZABLE.
Така че:споделеното заключване забранява записите и може да бъде накарано да продължи, като го направите СЕРИАЛИЗУЕМО