sql >> Databáze >  >> RDS >> Sqlserver

Získejte Update Table Lock na začátku uložené procedury v SQL Server

Ř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?

HOLDLOCK nebo SERIALIZABLE

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.

Z "Režimy uzamčení"

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Í



  1. Vrátit seznam tabulek a pohledů na SQL Server pomocí T-SQL (sp_tables)

  2. JSON_SET() – Vložení nebo aktualizace hodnot v dokumentu JSON v MySQL

  3. java.sql.SQLException:Nebyl nalezen žádný vhodný ovladač pro jdbc:sqlserver

  4. Co je CHAR_LENGTH() v MySQL?