Procedimientos Almacenados en SQL Server: Insertar Personas con Validación de DNI y Parámetros Opcionales
Procedimientos almacenados para añadir personas (BD de prueba)
En este ejercicio vamos a crear varios procedimientos almacenados para añadir personas a la tabla PERSONAS de una base de datos de prueba.
1. Procedimiento básico para añadir personas
Creamos un procedimiento que inserta los datos de una persona sin ninguna validación:
CREATE PROCEDURE AÑADIR_PERSONA
@DNI CHAR(8),
@NOMBRE VARCHAR(30),
@DIRECCION VARCHAR(35),
@TELEFONO CHAR(9),
@FECNAC DATETIME,
@CIUDAD VARCHAR(15)
AS
BEGIN
INSERT INTO PERSONAS
(DNI,NOMBRE,DIRECCION,TELEFONO,FECNAC,CIUDAD) VALUES (@DNI,@NOMBRE,@DIRECCION,@TELEFONO,@FECNAC,@CIUDAD)
END2. Procedimiento que evita DNI duplicados
En este caso, nos aseguramos de que no exista previamente el DNI antes de insertar el registro:
CREATE PROCEDURE AÑADIR_PERSONA_DNIDUPLICADO
@DNI CHAR(8),
@NOMBRE VARCHAR(30),
@DIRECCION VARCHAR(35),
@TELEFONO CHAR(9),
@FECNAC DATETIME,
@CIUDAD VARCHAR(15)
AS
BEGIN
IF @DNI NOT IN (SELECT DNI FROM PERSONAS)
BEGIN
INSERT INTO PERSONAS
(DNI,NOMBRE,DIRECCION,TELEFONO,FECNAC,CIUDAD) VALUES (@DNI,@NOMBRE,@DIRECCION,@TELEFONO,@FECNAC,@CIUDAD)
END
ELSE
PRINT 'DNI DUPLICADO'
ENDEjecución del procedimiento
DECLARE @FECHA DATETIME
SET @FECHA=CONVERT(DATETIME,'12/3/1999', 103)
-- Ejecutar
EXEC AÑADIR_PERSONA_DNIDUPLICADO '76654206','SERGIO','ENCINAR','637718526',@FECHA,'GRANADA'
EXEC AÑADIR_PERSONA_DNIDUPLICADO '76654207','ANTONIO','ENCINAR','637718526',@FECHA,'GRANADA'3. Procedimiento con parámetros opcionales
Los parámetros opcionales se definen asignándoles el valor NULL por defecto, de forma que pueden omitirse al ejecutar el procedimiento:
CREATE PROCEDURE AÑADIR_PERSONA_PARAMETROPCIONALES
@DNI CHAR(8),
@NOMBRE VARCHAR(30),
@DIRECCION VARCHAR(35),
@TELEFONO CHAR(9),
@FECNAC DATETIME = NULL, -- Parámetro opcional
@CIUDAD VARCHAR(15) = NULL -- Parámetro opcional
AS
BEGIN
IF @DNI NOT IN (SELECT DNI FROM PERSONAS)
BEGIN
INSERT INTO PERSONAS
(DNI,NOMBRE,DIRECCION,TELEFONO,FECNAC,CIUDAD) VALUES (@DNI,@NOMBRE,@DIRECCION,@TELEFONO,@FECNAC,@CIUDAD)
END
ELSE
PRINT 'DNI DUPLICADO'
ENDEjecución sin pasar la fecha ni la ciudad
DECLARE @FECHA DATETIME
SET @FECHA=CONVERT(DATETIME,'12/3/1999', 103)
-- Ejecutar sin pasar la fecha y la ciudad
EXEC AÑADIR_PERSONA_PARAMETROPCIONALES '76654209','SERGIO','ENCINAR','637718526'
EXEC AÑADIR_PERSONA_PARAMETROPCIONALES '76654208','ANTONIO','ENCINAR','637718526'4. Procedimiento con valor por defecto
En este procedimiento, la ciudad toma el valor 'GRANADA' si no se especifica al ejecutarlo:
CREATE PROCEDURE AÑADIR_PERSONA_PARAMETRODEFECTO2
@DNI CHAR(8),
@NOMBRE VARCHAR(30),
@DIRECCION VARCHAR(35),
@TELEFONO CHAR(9),
@FECNAC DATETIME = NULL, -- Parámetro opcional
@CIUDAD VARCHAR(15) = 'GRANADA' -- Valor por defecto
AS
BEGIN
IF @DNI NOT IN (SELECT DNI FROM PERSONAS)
BEGIN
INSERT INTO PERSONAS
(DNI,NOMBRE,DIRECCION,TELEFONO,FECNAC,CIUDAD) VALUES (@DNI,@NOMBRE,@DIRECCION,@TELEFONO,@FECNAC,@CIUDAD)
END
ELSE
PRINT 'DNI DUPLICADO'
ENDEjecución sin pasar la fecha ni la ciudad
DECLARE @FECHA DATETIME
SET @FECHA=CONVERT(DATETIME,'12/3/1999', 103)
-- Ejecutar sin pasar la fecha y la ciudad
EXEC AÑADIR_PERSONA_PARAMETRODEFECTO2 '76654210','SERGIO','ENCINAR','637718526'
EXEC AÑADIR_PERSONA_PARAMETRODEFECTO2 '76654208','ANTONIO','ENCINAR','637718526'