es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo omitir filas seleccionadas en SQL

¿Cómo puedo evitar que las filas que tienen bloqueos sean seleccionadas?

Comenzar transacción

Seleccionar * 
De tabla with(holdlock) 
Donde id = 2

</en la segunda sesión, cuando se ejecuta la consulta, la fila que tiene un valor de id igual a 2 debería ser excluida del resultado.>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para omitir las filas que están bloqueadas al ser seleccionadas, puedes usar la sugerencia de consulta with(nolock) o with(readuncommitted) en la instrucción SELECT. Esta sugerencia especifica que SQL Server no debe adquirir un bloqueo compartido en las filas seleccionadas.

    Sin embargo, en el escenario específico donde ya se ha adquirido un bloqueo utilizando la sugerencia de consulta with(holdlock), puedes omitir la fila bloqueada del conjunto de resultados consultando la misma fila con un nivel de aislamiento de transacción diferente. Por ejemplo, puedes abrir una nueva ventana de consulta y ejecutar la siguiente consulta:

    Set transaction isolation level read uncommitted
    
    Select * 
    From table
    Where id = 2
    

    Esta consulta no adquirirá un bloqueo compartido en las filas seleccionadas y omitirá la fila que actualmente está siendo retenida con un bloqueo por la transacción anterior.

    Ten en cuenta que cambiar el nivel de aislamiento de la transacción puede tener otras implicancias, como permitir lecturas sucias o lecturas no repetibles, así que úsalo con precaución y solo en escenarios específicos donde sea necesario.

Comments are closed.