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

Řadové zámky - jejich ruční použití

Typ přístupu, který bych doporučil, je mít v záznamu pole, které označuje, zda je záznam zpracováván nebo ne. Potom implementujte sproc "číst další z fronty", který provede následující, aby se zajistilo, že žádné 2 procesy nevyzvednou stejný záznam:

BEGIN TRANSACTION

-- Find the next available record that's not already being processed.
-- The combination of UPDLOCK and READPAST hints makes sure 2 processes don't 
-- grab the same record, and that processes don't block each other.
SELECT TOP 1 @ID = ID
FROM YourTable WITH (UPDLOCK, READPAST)
WHERE BeingProcessed = 0

-- If we've found a record, set it's status to "being processed"
IF (@ID IS NOT NULL)
    UPDATE YourTable SET BeingProcessed = 1 WHERE ID = @ID

COMMIT TRANSACTION

-- Finally return the record we've picked up
IF (@ID IS NOT NULL)
    SELECT * FROM YourTable WHERE ID = @ID

Další informace o těchto tabulkových nápovědách naleznete v MSDN



  1. 8 Nové funkce kompatibility Oracle v EnterpriseDB PPAS 9.2 Beta

  2. Chyba konektoru MySQL Hodnota časového pásma serveru Středoevropský čas

  3. Zajímavý problém s Oracle UNION a ORDER BY

  4. Vytvořte pole s výchozím časem epochy