AYUDA CON MANEJO DE TABLA DE SECUENCIAS

23/11/2005 - 19:09 por NATHALY_EC | Informe spam
Hola amigos tengo un grave problema necesito hacer un proceso que inserte en
una tabla ciertos datos pero que tome el secuancial para esa tabla de una
tabla de secuencias que guarda el secuancial a tomar.

Tengo esto para tomar el secuencia:
Update tabla_secuancias @secuencia_actual=id_secuencia,
idsecuencia=idsecuancia+1 where tabla=transaccional_personal

@secuencia tiene el secuancial que con el que se va insertar

me dijeron que esto no era sufuciente que tenia que controlar si falla o no
el proceso asi que puse

begin tran insercion
Update tabla_secuancias @secuencia_actual=id_secuencia,
idsecuencia=idsecuancia+1 where tabla=transaccional_personal

if @@error=0
commit tran insercion
else
rollback tran insercion

sin embargo ahora con esto se da a veces que se emite error de constreinst -
key duplicate

y no tengo idea porque...

HELP ALGUIEN ME PUEDE AYUDAR CON ESTO????

muchos usuarios esan esos procesos asi que debo contemplar el bloqueo para
que nadie tome el secuancial repetido
quee stoy haciendo mal... ayuda

de antemano gracias..

saludos,
 

Leer las respuestas

#1 Alejandro Mesa
23/11/2005 - 19:29 | Informe spam
NATHALY_EC,

Yo te recomiendo que no trates de hacer dos operaciones al mismo tiempo,
tomar valor actual e incrementar. Crea un sp que incremente el valor en uno y
te devuelva ese nuevo valor como secuencia a insertar.

create table t1 (
c1 int not null primary key check (c1 >= 0) default (0)
)
go

insert into t1 default values
go

create procedure dbo.p1
@nuevo_valor int output
as
set nocount on

update t1
set @nuevo_valor = c1 = c1 + 1

return @@error
go

declare @i int
declare @j int
declare @rv int

set @j = 1

while @j < 10
begin

exec @v = dbo.p1 @i output

if @rv = 0 and @@error = 0
insert into t1 values(@i)
else
print 'error cojiendo proximo valor'

set @j = @j + 1

end

select * from t1
go

drop procedure dbo.p1
go

drop table t1
go


AMB

"NATHALY_EC" wrote:

Hola amigos tengo un grave problema necesito hacer un proceso que inserte en
una tabla ciertos datos pero que tome el secuancial para esa tabla de una
tabla de secuencias que guarda el secuancial a tomar.

Tengo esto para tomar el secuencia:
Update tabla_secuancias @secuencia_actual=id_secuencia,
idsecuencia=idsecuancia+1 where tabla=transaccional_personal

@secuencia tiene el secuancial que con el que se va insertar

me dijeron que esto no era sufuciente que tenia que controlar si falla o no
el proceso asi que puse

begin tran insercion
Update tabla_secuancias @secuencia_actual=id_secuencia,
idsecuencia=idsecuancia+1 where tabla=transaccional_personal

if @@error=0
commit tran insercion
else
rollback tran insercion

sin embargo ahora con esto se da a veces que se emite error de constreinst -
key duplicate

y no tengo idea porque...

HELP ALGUIEN ME PUEDE AYUDAR CON ESTO????

muchos usuarios esan esos procesos asi que debo contemplar el bloqueo para
que nadie tome el secuancial repetido
quee stoy haciendo mal... ayuda

de antemano gracias..

saludos,

Preguntas similares