Proc almacenado generar codigo de un Libro con Prefijo
Hola!, mi problema es el siguiente, quiero ingresar un nuevo "libro" mediante un proc almacenado, utilizando el campo Prefijo de la tabla "Tema" , para poder generar el codigo del libro, como puedo generar este codigo mediante un proc almacenado?
Bueno te mando un ejemplito, pero te recomendaria q averigues sobre los codigos ISBN, son diferentes formas de armar codigo para libros y muy usados en sistemas de bibliotecas, etc
Create procedure GuardaLibro...
DECLARE @XPrefijo char(4)-- fijarse longitud de prefijo
DECLARE @UltimoCodigo --Almacena el ultimo codigo generado
SELECT @XPrefijo=Prefijo FROM Tema WHERE .....'--definir sentencia where por ejemplo q el libro pretenesca a una categoria
--luego una sentencia SELECT para verificar el ultimo codigo generado con ese prefijo
SELECT TOP 1 @UltimoCodigo=CodigoLibro From TablaLibro WHERE substring(CodigoLibro,1,4) = @prefijo
if @@rowcount= 0
begin
--primer codigo
SET @UltimoCodigo= @prefijo + '0001' -- ver longitud de codigo
end
else
Begin
'Seleccionar la parte nuemrica correlativa, convertirla a numerico, sumarle 1, convertirlo a cadena, concatenar con la cantidad de ceron conveniento para q llene la longitud numerica, y concatenar al inicio el prefijo.
SET @UltimoCodigo= Right('0000' + Convert( CONVERT(substring(@UltimoCodigo,5,4), int) +1 ,char)(4))
SET @UltimoCodigo=@prefijo + @UltimoCodigo
End
--nota : los pasos anteriors se pueden resumir todo en una consulta select mas compleja pero para la explicacion lo separe.
bueno como ya tienen armado el nuevo codigo en @UltimoCodigo ya el resto es facil, espero haberte ayudado... Saludos
-La obtencion d ste codigo sera acosejable manejarla en una funcion aparte.
Select
Note q me falta el ordenamiento en la cosulta de obtencion de codigo. corrijo deberia ser de la sigueinte estructura...
SELECT TOP 1 @UltimoCodigo=CodigoLibro FROM TablaLibro WHERE ... ORDER BY CodigoLibro DESC
el ordenamietno descendente asegura q al seleccionar con TOP 1 selecciones el ultimo codigo generado segun el WHERE,... bueno ahora si... siguiedno stos pasos te deberia salir.. Saludos
SELECT TOP 1 @UltimoCodigo=CodigoLibro FROM TablaLibro WHERE ... ORDER BY CodigoLibro DESC
el ordenamietno descendente asegura q al seleccionar con TOP 1 selecciones el ultimo codigo generado segun el WHERE,... bueno ahora si... siguiedno stos pasos te deberia salir.. Saludos