sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo bloquear exclusivamente una fila que evita la operación CRUD

BEGIN TRAN

    SELECT 1
    FROM Table
    WITH (XLOCK, ROWLOCK)

COMMIT TRAN

Eso hará el truco.

EDITAR

Como han señalado otros, no puede bloquear una fila para que no se lea . La única forma que conozco de hacer esto es la siguiente:

WITH (UPDLOCK, TABLOCK)

Y esto es asumiendo que un CON (NOLOCK) nunca se usa en una declaración SELECT (que debería evitarse de todos modos).

Probé esto y funcionará, aunque TABLOCK solo debe usarse en casos extremos. Ciertamente, si se requiere concurrencia, es una mala solución y se necesitaría alguna otra forma de bloqueo. Una forma es actualizar una columna de bits "Disponible Verdadero/Falso" y solo leer las filas donde Disponible =Verdadero. Como sugirió @gbn, READPAST podría usarse con esto.