Tercer paso: Tabla y procedimientos almacenados
Creación de tabla, procedimientos almacenados y casos de prueba en SQL Server
Fecha: 4 de septiembre
Hora de inicio: 6:55 p.m.
Hora de finalización: 11:45 p.m.
1. Creación de la tabla Empleado
Durante esta sesión inicié creando la tabla Empleado con los siguientes campos: id, Nombre y Salario. El script fue proporcionado por el profesor.
CREATE TABLE dbo.Empleado
(
id INT IDENTITY (1, 1) PRIMARY KEY,
Nombre VARCHAR(128) NOT NULL,
Salario MONEY NOT NULL
);
Luego decidí migrar la columna Nombre de VARCHAR a NVARCHAR para evitar problemas con tildes y caracteres latinos como la ñ:
ALTER TABLE dbo.Empleado
ALTER COLUMN Nombre NVARCHAR(128) NOT NULL;
Esto asegura compatibilidad con Unicode y evita corrupción de datos al insertar nombres como 'María José' o 'Peña'.
2. Inserción manual de datos
Inserté 40 registros manuales para poblar la tabla y tener datos de prueba.
INSERT INTO dbo.Empleado (Nombre, Salario)
VALUES
('María Fernanda', 550000),
('José Pablo', 620000),
('Ana Lucía', 480000),
('Carlos Andrés', 710000),
('Laura Sofía', 530000),
('Luis Miguel', 590000),
('Daniela Jiménez', 500000),
('Andrés Felipe', 670000),
('Katherine Salas', 520000),
('Esteban Rojas', 600000),
('Valeria Vargas', 560000),
('Ricardo Solís', 580000),
('Paola Chaves', 540000),
('Jorge Luis', 610000),
('Melissa Mora', 570000),
('Cristian Araya', 630000),
('Natalia Ureña', 490000),
('Sebastián Castro', 650000),
('Gabriela Céspedes', 510000),
('Jonathan Ramírez', 600000),
('Rebeca Navarro', 520000),
('Mauricio León', 580000),
('Tatiana Alfaro', 540000),
('Diego Monge', 620000),
('Andrea Paniagua', 560000),
('Francisco Brenes', 590000),
('Isabel Soto', 530000),
('Kevin Cordero', 610000),
('Mariela Gutiérrez', 570000),
('David Salazar', 600000),
('Camila Rojas', 550000),
('Oscar Jiménez', 580000),
('Lucía Barquero', 510000),
('Felipe Vargas', 630000),
('Viviana Mora', 490000),
('Manuel Rodríguez', 610000),
('Nicole Chacón', 520000),
('Alejandro Méndez', 600000),
('Vanessa Quesada', 540000),
('Rafael Aguilar', 580000);
3. Procedimiento almacenado para insertar empleados
Implementé el procedimiento InsertarEmpleado, que incluye validaciones defensivas y retorna códigos de estado según el resultado:
CREATE PROCEDURE dbo.InsertarEmpleado
@Nombre VARCHAR(128),
@Salario MONEY
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Resultado INT;
-- Posibles valores del resultado de la operación:
-- 1 -> Éxito
-- -1 -> Salario inválido (menos o igual que cero)
-- -2 -> Nombre duplicado en la tabla
-- -99 -> Error inesperado
BEGIN TRY
-- Validación: el salario debe ser positivo
IF @Salario <= 0
BEGIN
SET @Resultado = -1; -- Salario inválido
RETURN @Resultado;
END
-- Validación: nombre ya registrado
IF EXISTS (
SELECT 1 FROM dbo.Empleado WHERE Nombre = @Nombre
)
BEGIN
SET @Resultado = -2; -- Nombre ya registrado
RETURN @Resultado;
END
-- Inserción de datos
INSERT INTO dbo.Empleado (Nombre, Salario)
VALUES (@Nombre, @Salario);
SET @Resultado = 1; -- Éxito
RETURN @Resultado;
END TRY
BEGIN CATCH
SET @Resultado = -99; -- Error inesperado
RETURN @Resultado;
END CATCH
END
4. Caso de prueba: inserción exitosa
Probé el procedimiento con un empleado nuevo:
DECLARE @Resultado INT;
EXEC @Resultado = dbo.InsertarEmpleado
@Nombre = 'Luis Diego',
@Salario = 620000;
SELECT @Resultado AS CodigoRetorno;
5. Casos de prueba con errores
Salario inválido
EXEC @Resultado = dbo.InsertarEmpleado
@Nombre = 'Daniel Jimenez',
@Salario = -100;
SELECT @Resultado AS CodigoRetorno; -- Esperado: -1
Nombre duplicado
EXEC @Resultado = dbo.InsertarEmpleado
@Nombre = 'Jose Pablo',
@Salario = 700000;
SELECT @Resultado AS CodigoRetorno; -- Esperado: -2
6. Procedimiento para consultar empleados
Para mostrar los datos ordenados por nombre, creé el siguiente procedimiento:
CREATE PROCEDURE dbo.ConsultarEmpleados
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
SELECT
E.id,
E.Nombre,
E.Salario
FROM dbo.Empleado AS E
ORDER BY E.Nombre;
END TRY
BEGIN CATCH
RETURN -99;
END CATCH
END
Se evitó SELECT * y se usó alias E como buena práctica.
7. Caso de prueba: consulta de empleados
EXEC dbo.ConsultarEmpleados;
8. Comprobación de ejecución


