Unidad 5 SQL Procedimientos


Taller de Base de Datos

Unidad 5: SQL Procedimental

Lógica de Negocio en la Capa de Datos con SQL Server 2025

¿Por qué es vital el SQL Procedimental en SQL Server 2025?

El lenguaje Transact-SQL (T-SQL) estándar es declarativo, lo que significa que le indicamos al servidor qué datos queremos pero no cómo procesarlos paso a paso. El SQL Procedimental extiende T-SQL incorporando control de flujo (bucles, condiciones, manejo de excepciones) y la capacidad de encapsular reglas de negocio complejas directamente dentro del motor del SGBD.

🚀 Rendimiento Optimizado

Reduce drásticamente el tráfico de red enviando únicamente las llamadas de ejecución y no bloques masivos de consultas T-SQL.

🛡️ Seguridad Granular

Permite otorgar permisos de ejecución sobre objetos de procedimiento sin exponer la lectura o modificación directa de las tablas subyacentes.

🔄 Reutilización y Mantenimiento

Centraliza la lógica empresarial en un solo lugar. Si la regla cambia, solo se modifica el objeto procedural en el servidor.

✨ Innovación SQL Server 2025: Integración mejorada con motores de procesamiento optimizados, soporte para ejecución compilada nativa acelerada y optimización avanzada de parámetros adaptativos para la reutilización de planes de ejecución procedurales.

5.1 Procedimientos Almacenados (Stored Procedures)

Un Stored Procedure (SP) es una colección ejecutable de sentencias T-SQL precompiladas. Puede recibir parámetros de entrada (IN), devolver valores a través de parámetros de salida (OUTPUT) y retornar conjuntos de datos completos o códigos de estado.

Esquema de Funcionamiento de un Stored Procedure
Aplicación EXEC sp_Nombre @Params SQL Server Engine Plan Precompilado Ejecución T-SQL Dataset / Output Tablas DB

Sintaxis y Ejemplo Práctico en T-SQL

-- Creación de un Stored Procedure con parámetros de Entrada y Salida
CREATE PROCEDURE dbo.usp_RegistrarVenta
    @ClienteID INT,
    @Monto DECIMAL(10,2),
    @VentaID INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;
    BEGIN TRY
        BEGIN TRANSACTION;
            INSERT INTO Ventas (ClienteID, Fecha, Total)
            VALUES (@ClienteID, GETDATE(), @Monto);
            
            SET @VentaID = SCOPE_IDENTITY();
        COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION;
        THROW;
    END CATCH
END;
GO

5.2 Funciones Definidas por el Usuario (UDF)

Las User-Defined Functions (UDF) son estructuras que aceptan parámetros, realizan una acción o cálculo y siempre devuelven un resultado. A diferencia de los Stored Procedures, las funciones **no pueden modificar el estado global de la base de datos** (no se permiten sentencias DML como INSERT, UPDATE o DELETE sobre tablas del sistema).

Tipos Principales de Funciones

1. Escalares (Scalar UDF)

Devuelven un **único valor** (un entero, cadena, fecha, etc.). Se invocan directamente en cláusulas SELECT o WHERE.

2. Tabla en Línea (Inline TVF)

Devuelven un conjunto de datos (tipo TABLE) basado en una sola sentencia SELECT. Son tratadas eficientemente por el optimizador.

3. Tabla Multisentencia (MSTVF)

Construyen una tabla temporal dentro de un bloque declarativo con múltiples sentencias complejas antes de retornar.

-- Ejemplo: Función Escalar para Calcular IVA
CREATE FUNCTION dbo.ufn_CalcularIVA (@Monto DECIMAL(10,2))
RETURNS DECIMAL(10,2)
AS
BEGIN
    RETURN @Monto * 0.16;
END;
GO

-- Uso de la función en una consulta:
SELECT Producto, Precio, dbo.ufn_CalcularIVA(Precio) AS IVA FROM Productos;

5.3 Disparadores (Triggers)

Un Trigger es un tipo especial de procedimiento almacenado que se ejecuta **automáticamente** cuando ocurre un evento específico en el servidor de base de datos.

⚡ Triggers DML

Se activan con eventos de manipulación de datos: INSERT, UPDATE o DELETE.

  • AFTER / FOR: Se ejecuta después de completar las validaciones de restricciones y la acción.
  • INSTEAD OF: Reemplaza la acción original por la lógica programada en el disparador.

🛡️ Triggers DDL

Se activan ante modificaciones estructurales como CREATE_TABLE, ALTER_TABLE o DROP_TABLE para auditoría o prevención.

🔑 Las Tablas Temporales Especiales: Dentro de un Trigger DML, SQL Server administra dos tablas lógicas virtuales en memoria:
  • INSERTED: Contiene las nuevas filas agregadas o actualizadas.
  • DELETED: Contiene las filas eliminadas o los valores previos a una actualización.
-- Ejemplo: Trigger de Auditoría Automática tras Modificar Empleados
CREATE TRIGGER trg_AuditoriaEmpleados
ON Empleados
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
    INSERT INTO Auditoria_Log (Tabla, Accion, Usuario, Fecha)
    SELECT 'Empleados', 'UPDATE', SYSTEM_USER, GETDATE()
    FROM INSERTED;
END;
GO

Ejercicios Prácticos Guiados

Ejercicio 1: Crear un Stored Procedure de Actualización de Stock

Requerimiento: Diseña un procedimiento usp_ActualizarStock que reciba un @ProductoID y la @CantidadVendida. Debe verificar si hay existencias suficientes antes de descontar.

CREATE PROCEDURE dbo.usp_ActualizarStock
    @ProductoID INT,
    @CantidadVendida INT
AS
BEGIN
    IF EXISTS (SELECT 1 FROM Productos WHERE ProductoID = @ProductoID AND Stock >= @CantidadVendida)
    BEGIN
        UPDATE Productos 
        SET Stock = Stock - @CantidadVendida 
        WHERE ProductoID = @ProductoID;
        PRINT 'Stock actualizado con éxito.';
    END
    ELSE
    BEGIN
        RAISERROR('Stock insuficiente para realizar la operación.', 16, 1);
    END
END;
Ejercicio 2: Trigger de Control Evitar Borrado de Datos Críticos

Requerimiento: Crear un Trigger INSTEAD OF DELETE para evitar que se eliminen clientes que tengan facturas registradas.

CREATE TRIGGER trg_PrevenirBorradoClientes
ON Clientes
INSTEAD OF DELETE
AS
BEGIN
    IF EXISTS (
        SELECT 1 FROM Facturas f
        JOIN DELETED d ON f.ClienteID = d.ClienteID
    )
    BEGIN
        RAISERROR('No se puede eliminar el cliente porque posee facturas asociadas.', 16, 1);
    END
    ELSE
    BEGIN
        DELETE FROM Clientes WHERE ClienteID IN (SELECT ClienteID FROM DELETED);
    END
END;

Examen de Conocimientos

Evaluación Interactiva sobre SQL Procedimental en SQL Server 2025.

1. ¿Cuál es la principal diferencia entre una Función Escalar y un Stored Procedure?

2. ¿Qué contienen las tablas virtuales «INSERTED» y «DELETED» dentro de un Trigger AFTER UPDATE?

3. ¿Qué tipo de Trigger sustituye por completo la sentencia de origen que lo invocó?


SQL Server: Procedimientos, Funciones y Triggers
Una persona programando en una laptop frente a varios monitores
Guía práctica · SQL Server 2025

SQL Server: Procedimientos, Funciones y Triggers

Comprende cómo los objetos programables convierten consultas aisladas en soluciones seguras, reutilizables y fáciles de mantener.

Comenzar la lección
01 · Fundamentos

¿Qué son los procedimientos en SQL Server?

Un procedimiento almacenado es un conjunto de instrucciones T-SQL guardado dentro de la base de datos. En lugar de repetir una consulta en cada aplicación, se crea una vez, se valida y se ejecuta cuando se necesita.

Lógica cerca de los datos

Agrupa reglas, consultas y transacciones en un punto controlado de SQL Server.

Acceso controlado

Permite otorgar permisos para ejecutar una acción sin exponer directamente las tablas.

Menos repetición

La misma lógica sirve a reportes, APIs y aplicaciones sin copiar y pegar código.

5.1 · Procedimientos almacenados

Una receta ejecutable dentro de la base de datos

Los procedimientos almacenados reciben parámetros, realizan una tarea y pueden devolver conjuntos de resultados, valores de salida o códigos de estado. Son ideales para operaciones de negocio como registrar una venta, consultar pedidos o actualizar inventario.

¿Para qué sirven?

  • Encapsulan operaciones complejas bajo un nombre claro.
  • Reducen tráfico entre aplicación y servidor.
  • Favorecen planes de ejecución reutilizables.
  • Centralizan validaciones y manejo de errores.

Flujo paso a paso

1

Definir la intención

Elige una acción concreta: consultar, insertar, actualizar o coordinar una transacción.

2

Declarar parámetros

Usa parámetros tipados para recibir datos de forma controlada y reutilizable.

3

Ejecutar y devolver

Invócalo con EXEC; SQL Server procesa el bloque y devuelve el resultado esperado.

Sintaxis básica comentada

-- Crea una operación reutilizable con un parámetro
CREATE PROCEDURE dbo.ObtenerPedidosCliente
  @ClienteId INT
AS
BEGIN
  SELECT PedidoId, Fecha, Total
  FROM dbo.Pedidos
  WHERE ClienteId = @ClienteId;
END;

-- Ejecuta el procedimiento cuando se necesita
EXEC dbo.ObtenerPedidosCliente @ClienteId = 12;
Consejo: usa nombres consistentes, por ejemplo <strong>dbo.Obtener…</strong> o <strong>dbo.Registrar…</strong>, y evita prefijos <strong>sp_</strong> para no interferir con procedimientos del sistema.
5.2 · Funciones

Funciones: transformar datos y devolver un resultado

Una función definida por el usuario devuelve un valor escalar o una tabla. A diferencia de un procedimiento, puede utilizarse dentro de expresiones SELECT, WHERE o JOIN cuando su diseño lo permite.

Escalares

Reciben valores y devuelven uno solo: impuestos, descuentos, formatos o cálculos.

En línea con tabla

Devuelven una tabla a partir de una sola consulta; son útiles para filtros reutilizables.

Multisentencia

Construyen una tabla mediante varias instrucciones; úsalas con criterio por su costo potencial.

Procedimiento almacenado

Se ejecuta con EXEC. Puede modificar datos, administrar transacciones y devolver varios resultados.

VS

Función

Devuelve un valor o tabla. Se integra en consultas y se orienta a cálculos o transformación.

Ejemplo: calcular un valor reutilizable

-- Una función escalar devuelve un solo valor
CREATE FUNCTION dbo.CalcularIVA
  (@Importe DECIMAL(10,2))
RETURNS DECIMAL(10,2)
AS
BEGIN
  RETURN @Importe * 0.16;
END;

SELECT dbo.CalcularIVA(1000) AS IVA;
5.3 · Triggers

Triggers: acciones automáticas ante cambios

Un trigger es código que SQL Server ejecuta automáticamente ante eventos como INSERT, UPDATE o DELETE. Resulta útil para auditoría e integridad, pero debe diseñarse con cuidado porque puede ocultar lógica y afectar el rendimiento.

AFTER

Se ejecuta después de que la operación se completa correctamente; es común para auditoría.

INSTEAD OF

Sustituye la acción original y permite controlar operaciones sobre tablas o vistas.

Advertencia clave

Diseña para múltiples filas. No asumas que inserted o deleted contiene solo un registro.

Aplicación solicita un cambio
INSERT / UPDATE / DELETE
Trigger se activa
Auditoría o regla aplicada

Ejemplo práctico de auditoría

-- Registra cambios después de una actualización
CREATE TRIGGER dbo.trg_AuditarPrecio
ON dbo.Productos
AFTER UPDATE
AS
BEGIN
  INSERT INTO dbo.AuditoriaPrecios(ProductoId, FechaCambio)
  SELECT ProductoId, SYSDATETIME() FROM inserted;
END;
SQL Server 2025 · Impacto

Por qué estos objetos siguen siendo esenciales

En arquitecturas modernas, la lógica de base de datos bien diseñada aporta consistencia. El objetivo no es poner todo en SQL, sino ubicar cada regla donde aporte más valor y sea más fácil de auditar.

Rendimiento
alto
Seguridad
alto
Reutilización
alto
Automatización
clave
Laboratorio guiado

Ejercicios para consolidar lo aprendido

Escribe una propuesta breve antes de consultar la respuesta o probarla en tu entorno de SQL Server.

01

Procedimiento de consulta

Diseña un procedimiento que reciba @CategoriaId y devuelva los productos activos de esa categoría. ¿Qué columnas mostrarías?

02

Función de negocio

Propón una función escalar que calcule un descuento según el total de compra. Indica parámetros y tipo de retorno.

03

Trigger responsable

Describe un trigger AFTER UPDATE para auditar cambios de salario. ¿Qué información guardarías y qué riesgo vigilarías?

Autoevaluación

Examen de conocimientos

Responde las preguntas de opción múltiple y usa las preguntas cortas para explicar con tus propias palabras.

1. ¿Cómo se ejecuta normalmente un procedimiento almacenado?
2. ¿Qué puede devolver una función escalar?
3. ¿Cuándo se activa un trigger AFTER?
4. ¿Qué tabla lógica contiene filas nuevas en un trigger DML?
5. Una ventaja de los procedimientos es:
6. ¿Cuál es una buena práctica con triggers?

Cierra la lección: diseña con intención

Los procedimientos organizan acciones; las funciones expresan cálculos reutilizables; los triggers reaccionan a eventos. Elegir correctamente cada objeto mejora la claridad, seguridad y capacidad de mantenimiento de una solución SQL Server.

Recomendación de estudio: practica primero con una base de datos de ejemplo, usa <strong>parámetros tipados</strong>, prueba escenarios con varias filas y documenta la intención de cada objeto programable.

Material educativo de SQL Server 2025 · Aprende, prueba y documenta cada decisión.