sql >> Database >  >> RDS >> Sqlserver

Verkrijg Update Table Lock aan het begin van de Stored Procedure in SQL Server

Je zei:

Je hebt gewoon een gedeeld leesslot nodig voor de duur van de TXN. Dit betekent dat geen enkel ander proces een "schrijf" -vergrendeling kan krijgen, in combinatie met een TABLOCK. En je hebt COUNT ook niet nodig.

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

Waarom denk je dat je een UPDATE LOCK wilt?

HOLDLOCK of SERIALIZABLE

Bewerken, na opmerking:

  • "exclusief slot" betekent "slechts één proces dat de gegevens gebruikt".
  • 'SERIALIZABLE' betekent in feite de sloten (gedeeld, exclusief, wat dan ook) veel langer vasthouden.

U kunt "exclusief slot" en . niet specificeren andere processen laten lezen. De concepten sluiten elkaar uit. U wilt voorkomen dat er naar de hele tabel wordt geschreven, wat een aanhoudende gedeelde/lees vergrendeling is voldoende. Dit is waar SERIALIZABLE van pas komt.

Van "Vergrendelingsmodi"

Dus:een gedeelde vergrendeling staat schrijven niet toe en kan worden gehandhaafd door deze SERIALISEERBAAR te maken



  1. Object kan niet worden geconverteerd naar een tekenreeks in MySQLi PHP

  2. Hoe ongebruikte tabellen in SQL Server te vinden

  3. TO_TIMESTAMP() Functie in Oracle

  4. ClassNotFoundException:com.mysql.jdbc.GoogleDriver