viernes, 16 de marzo de 2012

with(RowLock,Xlock) SQL SERVER 2008 Bloqueos Exclusivos

Buenas en esta ocasion hablaremos sobre los bloqueos exclusivos en SQL SERVER, ya que nos dimos con un problema.

PROBLEMATICA :
Esta semana estuvimos desarrollando el modulo de Produccion, en este modulo habia un requerimiento especial,nos prohibian el uso del IDENTITY, creo que la mayoria de los desarrolladores principiantes, estan muy acostumbrados al uso del IDENTITY , el requerimiento era para la generacion de Nro de Lotes, en esta tabla no se podia perder ni un solo correlativo, tambien nos pedian el mismo requerimiento para los codigos de todas las tablas.


SOLUCIÓN : 
Bueno en SQL SERVER (2000- 2008), existe una instruccion para resolver este problemas, que es,
with(RowLock,Xlock) , con esta instruccion se obtienen bloqueos exclusivos por fila, es decir puedo bloquear la fila de una tabla, mientras mi transaccion este activa, el problema no es en la BD si no en la aplicación, es decir el SQL CLIENT de .Net no reconoce que la transaccion es exclusiva Y NOS botara una excepción,

Vamos a resumir esta instruccion
 with(RowLock,Xlock) 

RowLock  = Bloquea la fila indicada en el Select. 
 Xlock =  Hace que el bloque sea exclusivo.

Aqui un pequeño basico ejemplo.

CREATE PROC PA_AGREGAR_A
AS 
declare @correlativo numeric
declare @codigoNuevo numeric

select @correlativo  =  CORRELATIVO
from CORRELATIVO
with(RowLock,Xlock)

set @codigoNuevo = @correlativo  +  1

insert into  A values (@codigoNuevo,'Nuevo')

update  CORRELATIVO
set CORRELATIVO.CORRELATIVO = @codigoNuevo



Bueno siendo ya casi media noche me despido 

Saludo.
 

No hay comentarios:

Publicar un comentario