procedimientos-almacenados-en-sql

Procedimientos almacenados en SQL

  • 5 min

Un Procedimiento Almacenado (a menudo llamado SP o Stored Proc) es un conjunto de instrucciones T-SQL que se guardan en la base de datos bajo un nombre.

Son la base del desarrollo de bases de datos. Piensa en ellos como las funciones o métodos de lenguajes como Java o Python, pero viviendo dentro de SQL Server.

¿Por que usar un procedimiento almacenado?

  1. Reutilizar código: Escribes la lógica una vez, la ejecutas mil veces.
  2. Seguridad: Puedes dar permiso a un usuario para ejecutar el procedimiento sin darle permiso para ver las tablas que hay detrás.
  3. Rendimiento: SQL Server compila y optimiza el plan de ejecución la primera vez que se ejecuta y lo reutiliza después.
  4. Reducir tráfico de red: En lugar de enviar 500 líneas de código desde tu aplicación al servidor, solo envías EXEC MiProcedimiento.

Crear un procedimiento: CREATE PROCEDURE

Para crear un procedimiento, usamos la sentencia CREATE PROCEDURE (o su abreviatura CREATE PROC), seguida del nombre, los parámetros (si los hay) y el cuerpo del código.

CREATE PROCEDURE NombreDelProcedimiento
AS
BEGIN
    -- Aquí va tu código T-SQL
    SELECT * FROM MiTabla;
END
Copied!
  • NombreProcedimiento: Es el nombre único que identifica al procedimiento almacenado.
  • AS: Indica el inicio del bloque de código que contiene las instrucciones SQL.
  • BEGIN…END: Delimita el cuerpo del procedimiento.

Por ejemplo, vamos a crear un procedimiento que nos devuelva la lista de todos los productos activos.

CREATE PROCEDURE usp_ObtenerProductosActivos
AS
BEGIN
    SET NOCOUNT ON; -- Buena práctica (veremos por qué abajo)

    SELECT ProductoID, Nombre, Precio
    FROM Productos
    WHERE Activo = 1;
END
Copied!

Nunca llames a tus procedimientos empezando por sp_ (ej: sp_ObtenerClientes). Ese prefijo está reservado para System Procedures (procedimientos del sistema) de Microsoft.

Si usas sp_, SQL Server buscará primero en la base de datos master del sistema, lo que penaliza el rendimiento y puede causar conflictos. Usa prefijos como usp_ (User Stored Procedure) o proc_.

Ejecutar un procedimiento: EXEC

Una vez creado, el procedimiento vive en la base de datos. Para invocarlo, usamos la palabra clave EXEC.

En nuestro ejemplo haríamos,

EXEC usp_ObtenerProductosActivos;
Copied!

Procedimientos con parámetros

Un procedimiento que siempre hace exactamente lo mismo es poco útil. La verdadera gracia viene cuando le pasamos datos para que trabaje dinámicamente.

Los parámetros se definen después del nombre del procedimiento, empezando con @ y su tipo de dato.

Por ejemplo, si queremos hacer un filtro por categoría,

CREATE PROCEDURE usp_ProductosPorCategoria
    @CategoriaID INT -- Parámetro de entrada
AS
BEGIN
    SET NOCOUNT ON;

    SELECT Nombre, Precio, Stock
    FROM Productos
    WHERE CategoriaID = @CategoriaID; -- Usamos el parámetro en el WHERE
END
Copied!

Para ejecutarlo, debemos pasar el valor:

-- Opción 1: Por posición
EXEC usp_ProductosPorCategoria 5;

-- Opción 2: Por nombre (Más seguro y legible)
EXEC usp_ProductosPorCategoria @CategoriaID = 5;
Copied!

Modificar y eliminar: ALTER y DROP

Por supuesto, podemos modificar o eliminar un procedimiento.

  • Para eliminarlo: DROP PROCEDURE usp_Nombre;
  • Para modificarlo: ALTER PROCEDURE usp_Nombre ...

Lógicamente, si borras o modificas un procedimiento, afectaras a todas las consultas que lo usen.

Tendrás que analizar los efectos, antes de modificarlo.