sql >> Database teknologi >  >> RDS >> Sqlserver

Få opdateringstabellås ved starten af ​​Stored Procedure i SQL Server

Du sagde:

Du har blot brug for en delt læselås, så længe TXN'et varer. Det betyder, at ingen anden proces kan få en "skrive"-lås sammen med en TABLOCK. Og du behøver heller ikke COUNT.

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

Hvorfor tror du, du vil have en OPDATERINGSLÅS?

HOLDLOCK eller SERIALIZABLE

Rediger efter kommentar:

  • "eksklusiv lås" betyder "kun én proces, der bruger dataene".
  • "SERIALISERBAR" betyder grundlæggende at holde låsene (delte, eksklusive, uanset hvad) i meget længere tid.

Du kan ikke angive "eksklusiv lås" og tillade andre processer at læse. Begreberne udelukker hinanden. Du vil forhindre skrivninger til hele tabellen, som vedvarede delt/læs lås vil gøre. Det er her SERIALIZABLE kommer ind i billedet.

Fra "Låsetilstande"

Så:en delt lås tillader ikke skrivning og kan fås til at fortsætte ved at gøre den SERIELISERbar



  1. RowVersion og ydeevne

  2. Adgang/jet-ækvivalent til Oracles afkodning

  3. Funktioner vs procedurer i Oracle

  4. JPA:java.lang.IllegalArgumentException:Ikke en enhed