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

Tabela SELECT i UPDATE, aby nie nakładać się na wątki

Jeśli masz na myśli blokowanie typu bezpiecznej kolejki współbieżności, to użyj wskazówek ROWLOCK, UPDLOCK, READPAST?

Warunek wyścigu kolejki procesów SQL Server

BEGIN TRAN

SELECT TOP 1 @QueryID = [ID] from Table WITH (ROWLOCK, UPDLOCK, READPAST)
UPDATE Table SET [Read] = 1 WHERE [ID] = @QueryID 

COMMIT TRAN -- TRAM

Jednak w jednym stwierdzeniu. coś takiego

WITH T AS
(
    --ORDER BY with TOP , or perhaps MIN is better?
    SELECT TOP 1 [Read], [ID] from Table
    WITH (ROWLOCK, UPDLOCK, READPAST) ORDER BY [Read]
)
UPDATE
    T
SET
    [Read] = 1;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rozwiązanie dla:Instrukcja aktualizacji sklepu, wstawiania lub usuwania wpłynęła na nieoczekiwaną liczbę wierszy (0)

  2. Jak generować instrukcje wstawiania z danych programu Excel i ładować do tabeli programu SQL Server — samouczek SQL Server / TSQL, część 103

  3. Kompresuj wiersze z wartościami null i duplikatami w pojedyncze wiersze

  4. Jak ustawić sortowanie kolumny w SQL Server (T-SQL)

  5. Wykonanie funkcji COUNT SQL