Pregunta sobre diseño de PK

02/02/2008 - 14:11 por Luis Flores | Informe spam
Me piden para una tabla de Items un codigo alfanumerico pero con la
siguiente caracteristica;

AAA999, donde AAA son tres letras correspondientes a las tres primeras del
nombre del item y 999 es una secuencia.
Ejemplos de codigos: PAP001, PAP002, ALM001, ALM002...

Quieren que el sistema me genere la proxima secuencia. He buscado en los
BOL como hacer eso en SQL pero no encuentro la manera, solo veo lo de las
identity.


Alguna ayuda al respecto? Me conformaria incluso con tener el codigo
separado en dos campos, si no hay mas remedio y tener un el consecutivo
autoincrementado, si se puede.

Gracias

Luis

Preguntas similare

Leer las respuestas

#41 Carlos Hidalgo
26/02/2008 - 16:07 | Informe spam
Alejandro, entonces como queda ya el procedimiento almacenado final, ya con
todas las modificaciones...

"Alejandro Mesa" escribió en el
mensaje de noticias
news:
Jesús López,

Espera, mientras tomo el cafe, noto que no es asi. Veamos el codigo.

IF NOT EXISTS (
SELECT *
FROM dbo.prefijo_item_ultima_seq
WHERE prefijo_item = @prefijo_item
)
INSERT INTO dbo.prefijo_item_ultima_seq (prefijo_item)
VALUES (@prefijo_item)

SELECT @error = @@ERROR, @rc = @@ROWCOUNT

IF @error != 0 GOTO ErrorHandler

UPDATE
dbo.prefijo_item_ultima_seq
SET
@seq = ultima_seq = ultima_seq + 1
WHERE
prefijo_item = @prefijo_item


Fijate que solo pregunto por el error (@error) para saltar el UPDATE, pero
cuando se inserta un duplicado, lo que se recive es una advertencia (de
que
el duplicado no se inserto - no se recive error) y seguidamente ocurre la
actualizacion. Fijate que la sentencia INSERT inserta el valor por defecto
(0) y luego este es actualizado.

La idea no es muy ortodoxa que digamos, pero devuelve la proxima secuencia
de acuerdo al valor presente durante la actualizacion.

De todas maneras prefiero usar la version que hace uso de sp_getapplock,
que
por cierto no he mencionado que es una idea interesante y fuera de lo
comun
para aplicar a este tipo de problemas.

AMB

"Alejandro Mesa" wrote:

Jesús López,

> El problema es que la conexión que recibe la advertencia también
> devuelve un
> secuencial de 1. Con lo cual estás duplicando los secuenciales.

Buena atrapada :-)


AMB

"Jesús López" wrote:

> > WAITFOR TIME '19:31:00'
>
> Eso no se me había ocurrido. Y efectivamente es una forma de provocar
> la
> situación.
>
> > Ejecute los scripts, mencionados al principio de este mensaje, varias
> > veces
> > y no tuve problemas. De vez en cuando una de las sesiones mostraba el
> > mensaje
> > "Duplicate key was ignored.", probando que una de las sesiones trato
> > de
> > insertar el prefijo nuevamente pero esta vez no hay error sino
> > advertencia.
> >
>
> El problema es que la conexión que recibe la advertencia también
> devuelve un
> secuencial de 1. Con lo cual estás duplicando los secuenciales.
>
>
> Saludos:
>
> Jesús López
> www.solidq.com
>
>
>
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida