Řekl jsi:
Jednoduše potřebujete sdílený zámek čtení po dobu trvání TXN. To znamená, že žádný jiný proces nemůže získat zámek "zápis" ve spojení s TABLOCK. A nepotřebujete ani COUNT.
...
BEGIN TRANSANCTION
SELECT TOP 1 KeyCol FROM TheTable WITH (TABLOCK, HOLDLOCK)
...
Proč si myslíte, že chcete UPDATE LOCK?
Upravit po komentáři:
- „exkluzivní zámek“ znamená „pouze jeden proces využívající data“.
- „SERIALIZOVATELNÉ“ v podstatě znamená držet zámky (sdílené, exkluzivní, jakékoli) mnohem déle.
Nemůžete zadat "exkluzivní zámek" a umožnit čtení dalších procesů. Koncepty se vzájemně vylučují. Chcete zabránit zápisu do celé tabulky, který přetrvával zámek sdílené/čtení udělá. Zde přichází na řadu SERIALIZABLE.
Takže:sdílený zámek znemožňuje zápis a lze jej nastavit tak, aby přetrvával tím, že bude SERIALIZAČNÍ