Generar numero correlativo o serial

01/02/2004 - 21:17 por news.microsoft.com | Informe spam
Hola lista,

Soy nuevo en T-SQL, asi que antes que nada quiero pedir disculpas
si esta inquietud resulta ofensiva para alguien.

Tengo una tabla para generar numeros correlativos de la forma:

pkname pkvalue
SQNOFACT 4566
SQNOEMP 981

Quisiera definir un procedimiento almacenado que lea los valores de la
tabla, de acuerdo al parametro de pkname pasado al procedimiento y luego
retorne el valor de la columna pkvalue y despues incremente en 1 el valor
esa columna. Este procedimiento se debe ejecutar como una transaccion para
evitar errores si hay accesos recurrentes al mismo registro.

Siguiendo la ayuda he definido un pequeño borrador pero no logro que
funcione correctamente:

create procedure
nextval @sqname char(128), @retval int OUTPUT
as

select @retval = gpk_currentnumber
from
generatepk where gpk_pk = @sqname


return @retval

pero al ejecutarlo asi:
execute nextval SQEMPLEADOS,1

No devuelve ningun dato pero tampoco genera ningun error, agradecere mucho
su colaboracion.

Sinceramente,

Josue Maldonado.
 

Leer las respuestas

#1 Mariano Alvarez \(MUG\)
01/02/2004 - 22:00 | Informe spam
create procedure nextval
@sqname char(128) ,
@retval int OUTPUT
as
select @retval = gpk_currentnumber
from generatepk
where gpk_pk = @sqname
return 0


declare @Proximo int
execute nextval SQEMPLEADOS,@Proximo
select @Proximo

Sin embargo vas a tener "condiciones de carrera" cuando tengas concurrencia
si quieres hacer primero el select y luego el update a menos que uses el
hint holdlock

Otra forma es usando UPDATE unicamente y en la misma clausula haces las dos
cosas actualizas sumando 1 y guardas el valor en una variable..




Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"news.microsoft.com" wrote in message
news:
Hola lista,

Soy nuevo en T-SQL, asi que antes que nada quiero pedir disculpas
si esta inquietud resulta ofensiva para alguien.

Tengo una tabla para generar numeros correlativos de la forma:

pkname pkvalue
SQNOFACT 4566
SQNOEMP 981

Quisiera definir un procedimiento almacenado que lea los valores de la
tabla, de acuerdo al parametro de pkname pasado al procedimiento y luego
retorne el valor de la columna pkvalue y despues incremente en 1 el valor
esa columna. Este procedimiento se debe ejecutar como una transaccion para
evitar errores si hay accesos recurrentes al mismo registro.

Siguiendo la ayuda he definido un pequeño borrador pero no logro que
funcione correctamente:

create procedure
nextval @sqname char(128), @retval int OUTPUT
as

select @retval = gpk_currentnumber
from
generatepk where gpk_pk = @sqname


return @retval

pero al ejecutarlo asi:
execute nextval SQEMPLEADOS,1

No devuelve ningun dato pero tampoco genera ningun error, agradecere mucho
su colaboracion.

Sinceramente,

Josue Maldonado.



Preguntas similares