Sugerencias de bloqueo
Se pueden especificar sugerencias de bloqueo para referencias de tablas individuales en las instrucciones SELECT, INSERT, UPDATE y DELETE. Las sugerencias especifican el tipo de bloqueo o las versiones de filas que utiliza la instancia de Microsoft SQL Server Database Engine (Motor de base de datos de SQL Server) para los datos de la tabla. Se pueden utilizar las sugerencias de bloqueo de tabla cuando se requiere un control más ajustado de los tipos de bloqueo adquiridos en un objeto. Estas sugerencias de bloqueo suplantan el nivel de aislamiento de la transacción actual durante la sesión.
Para obtener más información acerca de las sugerencias de bloqueo específicas y sus comportamientos, vea Sugerencias de tabla (Transact-SQL).
[!NOTA] El optimizador de consultas del Database Engine (Motor de base de datos) suele elegir el nivel de bloqueo correcto. Se recomienda utilizar las sugerencias de bloqueo de tabla para modificar el comportamiento de bloqueo predeterminado en los casos estrictamente necesarios. Impedir un nivel de bloqueo puede ir en detrimento de la simultaneidad.
El Database Engine (Motor de base de datos) podría verse forzado a adquirir bloqueos al leer los metadatos, incluso cuando procese una instrucción SELECT con una sugerencia de bloqueo que impida a las solicitudes compartir bloqueos al leer los datos. Por ejemplo, una instrucción SELECT que utiliza la sugerencia NOLOCK no adquiere bloqueos compartidos al leer los datos, pero podría solicitar bloqueos en alguna oportunidad al leer la vista de catálogo del sistema. Esto significa que es posible que una instrucción SELECT que utilice NOLOCK esté bloqueada.
Según se muestra en el siguiente ejemplo, si se establece el nivel de aislamiento de la transacción en SERIALIZABLE
y se utiliza la sugerencia de bloqueo de nivel de tabla NOLOCK
con la instrucción SELECT
, no se aplican los bloqueos de intervalos de claves usados normalmente para mantener las transacciones serializables.
USE AdventureWorks;
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
GO
BEGIN TRANSACTION;
GO
SELECT Title
FROM HumanResources.Employee WITH (NOLOCK);
GO
-- Get information about the locks held by
-- the transaction.
SELECT
resource_type,
resource_subtype,
request_mode
FROM sys.dm_tran_locks
WHERE request_session_id = @@spid;
-- End the transaction.
ROLLBACK;
GO
El único bloqueo utilizado que hace referencia a HumanResources.Employee
es un bloqueo de estabilidad de esquema (Sch-S). En este caso, ya no se garantiza la serializabilidad.
Vea también
Otros recursos
DELETE (Transact-SQL)
INSERT (Transact-SQL)
SELECT (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
Sugerencias de tabla (Transact-SQL)
UPDATE (Transact-SQL)