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

Come bloccare esclusivamente una riga che impedisce il funzionamento CRUD

BEGIN TRAN

    SELECT 1
    FROM Table
    WITH (XLOCK, ROWLOCK)

COMMIT TRAN

Questo farà il trucco.

MODIFICA

Come notato da altri, non puoi bloccare una riga per non essere letta . L'unico modo che conosco per farlo è il seguente:

WITH (UPDLOCK, TABLOCK)

E questo presuppone che un WITH (NOLOCK) non venga mai utilizzato in un'istruzione SELECT (che dovrebbe comunque essere evitata).

L'ho testato e funzionerà, anche se TABLOCK dovrebbe essere utilizzato solo in casi estremi. Certamente se è richiesta la concorrenza, è una cattiva soluzione e sarebbe necessaria qualche altra forma di blocco. Un modo è aggiornare una colonna di bit "Disponibile Vero/Falso" e leggere solo le righe in cui Disponibile =Vero. Come suggerito da @gbn, READPAST potrebbe essere usato con questo.