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

SELECT a UPDATE tabulky, takže nedochází k překrývání vláken

Pokud máte na mysli souběžné bezpečné zamykání fronty, použijte rady ROWLOCK, UPDLOCK, READPAST?

Podmínka závodu ve frontě procesů serveru SQL

BEGIN TRAN

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

COMMIT TRAN -- TRAM

Nicméně v jednom prohlášení. něco jako

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. jak zamknout některý řádek, protože v jiné transakci nejsou vybrány

  2. Sql binární do c# - Jak získat binární ekvivalent SQL binárního v c#

  3. OSX Lion Homebrew brew problémy s instalací mysql -v

  4. převádění řádků tabulky na sloupce v mysql