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