-- Query creado por: Molocho Huamani Sergio Alvaro
--Implementar un Query que permita crear un ID automático en la tabla ALUMNO. Este ID,
--debe contener los siguientes caracteres y en ese órden:
--Iniciales de Nombres y Apellidos (01 dígito por cada uno de ellos = 4 dígitos)
--Años de ingreso (04 dígitos)={2022,2023,2024…}
--Ciclo de Ingreso (01 dígito)={1,2,3,4}
--Iniciales de la Carrera Profesional (06 dígitos primeros)={'INGSIS','INGELE','ENGRED',…}
--Número correlativo ={0001,0002,0003,…}
--Desarrollo
--Creación tabla ALUMNO
CREATE TABLE ALUMNO(
ID CHAR(19) NOT NULL PRIMARY KEY,
NOMBRE VARCHAR(120) NOT NULL,
AÑO_INGRESO CHAR(4) NOT NULL,
CICLO CHAR(1) NOT NULL,
CARRERA VARCHAR(50) NOT NULL
)
--Creación de Procedimiento
CREATE PROC GENERAR_ID(
@NOM1 VARCHAR(20),
@NOM2 VARCHAR(20),
@APE1 VARCHAR(20),
@APE2 VARCHAR(20),
@AÑO CHAR(4),
@CIC CHAR(1),
@CAR VARCHAR(50))
AS
BEGIN TRAN GENERAR
BEGIN TRY
DECLARE @ID CHAR(19)
DECLARE @COD_NOM CHAR(4)=LEFT(@NOM1,1)+LEFT(@NOM2,1)+LEFT(@APE1,1)+LEFT(@APE2,1)
DECLARE @POS_ESP INT = CHARINDEX(' ', @CAR)
DECLARE @COD_CAR CHAR(6)=LEFT(@CAR,3)+SUBSTRING(@CAR,@POS_ESP+1,3)
DECLARE @CONT INT=(SELECT COUNT(*)FROM ALUMNO),@NUM_REG INT=1
WHILE @CONT>0
BEGIN
SET @NUM_REG+=1
SET @CONT-=1
END
IF NOT EXISTS(
SELECT*FROM ALUMNO
WHERE NOMBRE=@APE1+' '+@APE2+' '+@NOM1+' '+@NOM2
AND AÑO_INGRESO=@AÑO
AND CICLO=@CIC
AND CARRERA=@CAR)
BEGIN
SET @ID=@COD_NOM+@AÑO+@CIC+@COD_CAR+FORMAT(@NUM_REG,'0000')
INSERT INTO ALUMNO VALUES (@ID,@APE1+' '+@APE2+' '+@NOM1+'
'+@NOM2,@AÑO,@CIC,@CAR)
PRINT 'SE GENERO EL ID CORRECTAMENTE (SE INSERTARON LOS DATOS)'
END
ELSE
BEGIN
PRINT 'ERROR AL REGISTRAR ALUMNO'
END
COMMIT TRAN GENERAR
END TRY
BEGIN CATCH
ROLLBACK TRAN GENERAR
PRINT 'ERROR AL REGISTRAR ALUMNO'
END CATCH
GENERAR_ID 'PEDRO','ALBERTO','DAVILA','ENCISO','2022','1','INGENIERIA SISTEMAS'
GENERAR_ID 'ANA','ESTHER','BARRIENTOS','ATENCIO','2022','1','INGENIERIA SISTEMAS'
GENERAR_ID 'JUAN','MANUEL','PICAPIEDRA','MANRIQUE','2022','1','INGENIERIA SOFTWARE'
SELECT*FROM ALUMNO