Porque no genera un numero unico?

01/09/2005 - 01:11 por Claudio | Informe spam
Hola,

Cree una SP que inserta datos en una tabla y por cada grupo de datos que
graba, genera un identificador unico para ese grupo.

Tengo un problema que cuando 2 o mas pcs ejecutan el proceso al mismo
tiempo, no genera un unico numero si no que se repite, y por consiguiente da
error

Vean el codigo:

BEGIN TRANSACTION

Select @IDPROCESS=(select isnull(max(ID),0)+1 From tabla1)

INSERT INTO Tabla1
select @IDPROCESS,* from temporal#

COMMIT TRANSACTION

DROPT TABLE TEMPORAL#

No se supone que entre el begin transaction y el commit, "tabla1" queda
temporariamente bloqueada ??? o es solo para insertar y deletar???

Como soluciono ese problema para que si o si genere un ID unico no importa
cuantos procesos esten accediendo a la tabla ????????


Tambien probe de la siguiente forma, creando una tabla con un contador y un
stored procedure extra para generar el numero, pero tampoco funciona!!

BEGIN TRANSACTION
Exec gereasynum @IDPROCESS output

INSERT INTO Tabla1
select @IDPROCESS,* from temporal#

COMMIT TRANSACTION

Y la procedure que genera el numero:

ALTER procedure GerEASYNum
/*

*/
@OUT_Registro FLOAT OUTPUT

AS
Begin
BEGIN TRANSACTION

select @out_registro=(select count(*) from contador)

If @out_registro=0
begin
Insert INTO CONTADOR
(counter1) values(0)
end

Select @OUT_Registro=(select isnull(max(counter1),0)+1 From contador)

UPDATE CONTADOR
SET counter1=@out_registro
COMMIT TRANSACTION

END

Gracias,

Claudio.
 

Leer las respuestas

#1 Claudio
01/09/2005 - 01:17 | Informe spam
ALTER procedure GerEASYNum
/*

*/
@OUT_Registro FLOAT OUTPUT

AS
Begin
BEGIN TRANSACTION

select @out_registro=(select count(*) from contador)

If @out_registro=0
begin
Insert INTO CONTADOR
(counter1) values(0)
end

Select @OUT_Registro=(select counter1+1 From contador)

UPDATE CONTADOR
SET counter1=@out_registro
COMMIT TRANSACTION

END

Preguntas similares