Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Uzyskaj blokadę tabeli aktualizacji na początku procedury składowanej w programie SQL Server

Powiedziałeś:

Potrzebujesz po prostu wspólnej blokady odczytu na czas trwania TXN. Oznacza to, że żaden inny proces nie może uzyskać blokady „zapisu” w połączeniu z TABLOCK. I nie potrzebujesz też COUNT.

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

Jak myślisz, dlaczego chcesz BLOKADA AKTUALIZACJI?

HOLDLOCK lub SERIALIZABLE

Edytuj, po komentarzu:

  • "ekskluzywna blokada" oznacza "tylko jeden proces wykorzystujący dane".
  • "SERIALIZOWALNY" zasadniczo oznacza utrzymywanie blokad (wspólnych, wyłącznych, cokolwiek) przez znacznie dłuższy czas.

Nie możesz określić „wyłącznej blokady” i zezwól innym procesom na odczyt. Koncepcje wzajemnie się wykluczają. Chcesz zapobiec zapisom w całej tabeli, które utrzymywały się blokada współdzielona/odczyt wystarczy. Tu właśnie pojawia się SERIALIZABLE.

Od "Tryby blokady"

Więc:współdzielona blokada uniemożliwia zapisy i można ją zachować, ustawiając ją na SERIALIZOWALNOŚĆ



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak podzielić ciąg na zmienne w sql?

  2. Jak mogę pobrać listę identyfikatorów z tabeli SQL jako ciąg wartości oddzielonych przecinkami?

  3. Jak skopiować rekord w tabeli SQL, ale zamienić unikalny identyfikator nowego wiersza?

  4. Rekord tabeli nadrzędny podrzędny — budowanie zapytania SQL

  5. Wstaw wiele wierszy z parametrami SQL Server