Luego de tanto luchar ya encontramos el resultado de este conflicto que algunos lectores de esta web tienen. Si tienes alguna información que compartir puedes dejar tu información.
Solución:
NOLOCK: Es equivalente a READ UNCOMMITTED
(fuente : MSDN)
NOLOCK
o READ UNCOMMITTED
Especifica que se permiten lecturas sucias. No se emiten bloqueos compartidos para evitar que otras transacciones modifiquen los datos leídos por la transacción actual, y los bloqueos exclusivos establecidos por otras transacciones no impiden que la transacción actual lea los datos bloqueados. Permitir lecturas sucias puede causar una mayor simultaneidad, pero a costa de leer modificaciones de datos que luego son revertidas por otras transacciones.
READ UNCOMMITTED
y NOLOCK
las sugerencias solo se aplican a los bloqueos de datos. Todas las consultas, incluidas las with READ UNCOMMITTED and NOLOCK
sugerencias, adquirir bloqueos Sch-S (estabilidad del esquema) durante la compilación y la ejecución. Debido a esto, las consultas se bloquean cuando una transacción simultánea mantiene un bloqueo Sch-M (modificación de esquema) en la tabla.
Debajo del capó están realizando la misma acción.
El READ UNCOMMITTED
El nivel de aislamiento es el nivel de aislamiento menos restrictivo dentro de SQL Server, que también lo hace popular para los desarrolladores cuando buscan reducir el bloqueo.
El NOLOCK
La sugerencia de tabla detrás de escena realiza exactamente la misma acción que ejecutar bajo el nivel de aislamiento de lectura no confirmada.
Elúnica diferencia entre los dos es que el READ UNCOMMITTED
El nivel de aislamiento determina el mecanismo de bloqueo para toda la conexión y el NOLOCK
la sugerencia de tabla determina el mecanismo de bloqueo de la tabla a la que le da la sugerencia.
No hay diferencia en cuanto a sus funciones, como otros han mencionado.
La única diferencia es que puede aplicar WITH(NOLOCK)
selectivamente, en algunas mesas pero no en otras. READ UNCOMMITTED
se aplica NOLOCK
a todas las tablas en una sesión.
Si haces esto:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT *
FROM Table1 T1
INNER JOIN Table2 T2 ON T1.ID = T2.id
Es funcionalmente equivalente a:
SELECT *
FROM Table1 T1 WITH(NOLOCK)
INNER JOIN Table2 T2 WITH(NOLOCK) ON T1.ID = T2.ID
Pero también puedes aplicar WITH(NOLOCK)
selectivamente:
SELECT *
FROM Table1 T1 WITH(TABLOCK)
INNER JOIN Table2 WITH(NOLOCK) ON T1.ID = T2.ID
Si te gusta este mundo, eres capaz de dejar una noticia acerca de qué le añadirías a este post.