Skip to main content

Command Palette

Search for a command to run...

Tercer paso: Tabla y procedimientos almacenados

Published
3 min read

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

Enlaces fundamentales para desarrollar dicha tarea

Documentación SQL Server

Buenas prácticas en SQL Server