BLOQUEAR UN REGISTRO EN SQLSERVER

Me parece muy interesante el funcionamiento de bloquear un registro en SQL Server, hay de todos los sabores , pero me voy por lo mas simple ahora.
Para ello estoy leyendo este articulo
http://blogs.msdn.com/craigfr/archive/2007/04/25/read-committed-isolation-level.aspx
En el muestra que para bloquear un registro hay que usar
begin tran y para liberar commit tran
Te paso el ejemplo que utiliza , abri el management studio y abri una consulta y coloca esto para crear la tabla de ejemplo :
create table t (a int primary key, b int)
insert t values (1, 1)
insert t values (2, 2)
insert t values (3, 3)

Luego en la misma consulta puede ser, ingresa esto y ejecuta (haces una actualizacion):
begin tran
update t set b = 3 where a = 2

Te sale 1 registro afectado!

Ahora abri otra session ( otra consulta :) ) y hace un select de la tabla t:
select * from t
Veras que la consulta no termina ya que la pimera session bloque el registro 2. Andate nuevamente el la primera consulta y ejecuta commit tran pero solo eso no ejecutes de nuevo todo.
Veras que al ejecutar esto , el registro 2 se libera y con ello en la session 2 ya puede mostrar todos los registros.

En la sesion 2 notaras que ya muestra el registro cambiado.
Otra cosa que podrias hacer en la sesion 1 como el ejemplo de Craig Freedman es cambiar

update t set b = 4 where a = 1
update t set b = 0 where a = 3
select * from t
commit tran

Con ello en la session 1 te mostrara todos los datos cambiados , pero como en la sesion 2 ya tomo el primer registro con el dato viejo te muestra el viejo claro pero espero que se libere el registro 2 y con ello el cambio a partir de ahi te muestrael 2 y 3 cambiados, pero el primero no.




Esto es lo basico de bloquear registro, para mas info pueden ver el link que les pase.

Saludos
Adalberto

Comentarios