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?
- Reutilizar código: Escribes la lógica una vez, la ejecutas mil veces.
- Seguridad: Puedes dar permiso a un usuario para ejecutar el procedimiento sin darle permiso para ver las tablas que hay detrás.
- Rendimiento: SQL Server compila y optimiza el plan de ejecución la primera vez que se ejecuta y lo reutiliza después.
- 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
- 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
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;
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
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;
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.
