Hola,
Por curiosidad, prueba a ejecutar el siguiente script
Update Tabla Set Codigo = '001' where idAnim = '2526'
Y luego abro otra ventana del analizador de consultas y ejecuto lo
siguiente
Select * from Tabla Where codigo = '003'
Añade el siguiente script al de Gustavo;
-- Crea una tabla temp para almacenar salida de sp_lock
Create table #tmp(
spid smallint,
dbid smallint,
ObjId int,
IndId smallint,
Type nchar(4),
Resource nchar(16),
Mode nvarchar(8),
Status nvarchar(10))
GO
truncate table #tmp
insert #tmp
exec sp_lock
GO
USE NorthWind
GO
select * from #tmp where dbid = db_id('Northwind') and Objid =
object_id('orders')
GO
Cambia el script de Gustavo con la siguiente opcion:
BEGIN TRAN
UPDATE orders WITH (ROWLOCK) ...
ejecuta el script de arriba, a mi me da:
51 6 21575115 1 PAG 1:205 IX GRANT
51 6 21575115 0 TAB IX GRANT
51 6 21575115 1 KEY (0800541f512d) X GRANT
Observa que el exclusive (X) lock se establece al nivel de key en mi
servidor. SQL crea un lock "potencial" para la tabla, luego para la
pagina y posteriormente bloque el registro.
Prueba a cambiar la opcion con TABLOCK y PAGLOCK y observa como SQL
cambia la estrategia de bloqueos.
Saludos.