Stored Procedures en SQL Server

Clase 12 de 26Curso de Gestión de Bases de Datos con SQL Server

Resumen

Automatizar procesos repetitivos en bases de datos es una habilidad que marca la diferencia entre un analista operativo y uno estratégico. Los stored procedures (procedimientos almacenados o SP) permiten encapsular lógica compleja en un solo comando, reducir errores humanos y acelerar la ejecución de consultas que se repiten a diario. Dominar su creación, parametrización y ejecución es la base de todo lo que sigue en SQL Server.

¿Qué es un stored procedure y por qué usarlo?

Un SP es un bloque de código SQL con un nombre propio, guardado directamente en la base de datos [01:30]. Se ejecuta con el comando EXEC, recibe parámetros de entrada y devuelve resultados. Pensá en el proceso de cierre de mes de una empresa: en lugar de abrir quince scripts, ejecutarlos en orden y rezar para que nadie se equivoque, un procedimiento almacenado lo resuelve con un solo comando.

Las ventajas frente a ejecutar SQL directo son claras:

  • Plan de ejecución cacheado: después de la primera ejecución, el SP compila y se ejecuta más rápido.
  • Un solo punto de mantenimiento: si cambia la lógica, se actualiza el SP y no todos los scripts dispersos.
  • Control de acceso: se puede otorgar permiso de ejecución sobre el SP sin dar acceso directo a las tablas con SELECT.
  • Reutilización: la misma lógica se invoca desde Management Studio, desde otro SP, desde una aplicación o una API.
  • Seguridad: los parámetros previenen la inyección SQL dentro del código.

¿Cómo se crea y ejecuta un procedimiento almacenado?

La sintaxis de creación tiene dos partes fundamentales [04:05]. La primera define el nombre del SP y las variables que recibe. La segunda, encerrada entre BEGIN y END, contiene la lógica que se ejecutará.

sql CREATE PROCEDURE sp_consulta_ventas_por_pais @codigo_pais VARCHAR(10), @fecha_inicio VARCHAR(10), @fecha_fin VARCHAR(10) AS BEGIN SET NOCOUNT ON;

SELECT pa.nombre_pais, pa.codigo_pais, COUNT(*) AS total_ventas FROM pedidos p INNER JOIN paises pa ON p.codigo_pais = pa.codigo_pais WHERE pa.codigo_pais = @codigo_pais AND p.fecha >= @fecha_inicio AND p.fecha <= @fecha_fin GROUP BY pa.nombre_pais, pa.codigo_pais;

END;

El comando SET NOCOUNT ON le indica a SQL Server que no cuente las filas afectadas, lo que mejora el rendimiento del SP [05:12]. Cada variable declarada con @ se utiliza luego en la cláusula WHERE como filtro dinámico.

Una vez creado, el SP aparece en el explorador de objetos de Management Studio dentro de la carpeta Programación > Procedimientos almacenados [07:00].

¿Cómo se invoca con EXEC?

Para ejecutarlo basta con pasar los valores en el mismo orden de las variables [07:30]:

sql EXEC sp_consulta_ventas_por_pais 'AR', '2023-01-01', '2024-12-31';

No es obligatorio escribir el nombre de cada parámetro si se respeta el orden. Cambiar 'AR' por 'CL' o 'CO' devuelve los datos del país correspondiente sin reescribir la query completa. Esto simplifica enormemente el trabajo de analistas que consumen datos desde Power BI u otras herramientas.

Un SP también puede invocar a otro SP, generando cadenas de consultas, inserts y updates que automatizan operaciones masivas sobre la base de datos [09:15].

¿Qué son los valores por defecto en parámetros?

Se pueden asignar valores por defecto a las variables para que, si no se les pasa un dato, asuman uno predefinido [10:00]:

sql CREATE OR ALTER PROCEDURE sp_consulta_ventas_por_pais @codigo_pais VARCHAR(10) = NULL, @fecha_inicio DATE = NULL, @fecha_fin DATE = NULL AS BEGIN SET NOCOUNT ON; SET @fecha_fin = ISNULL(@fecha_fin, GETDATE()); SET @fecha_inicio = ISNULL(@fecha_inicio, DATEADD(YEAR, -1, GETDATE())); -- lógica de consulta END;

Si no se ingresa código de país, el SP devuelve todos los países. Si no se pasan fechas, asume el último año desde la fecha actual. Esta flexibilidad es la gran ventaja de parametrizar con valores por defecto.

¿Cómo se modifica, elimina y consulta un SP existente?

El mantenimiento de procedimientos almacenados contempla varias operaciones esenciales [13:10]:

  • Modificar: ALTER PROCEDURE permite cambiar la lógica sin eliminar y recrear.
  • Crear o alterar: CREATE OR ALTER PROCEDURE crea el SP si no existe o lo modifica si ya está.
  • Eliminar: DROP PROCEDURE IF EXISTS nombre_sp lo borra de forma segura.
  • Ver definición: ejecutar EXEC sp_helptext 'nombre_sp' devuelve el código fuente completo del procedimiento [14:20].
  • Dar permiso: GRANT EXECUTE ON nombre_sp TO usuario otorga acceso de ejecución a un usuario específico.

Un procedimiento almacenado no es solo una consulta guardada: es un contrato. Acepta ciertos parámetros y devuelve un resultado predecible. En la siguiente sesión se incorporará control de flujo con IF, ELSE, WHILE y variables para hacer los SP aún más inteligentes.

Como desafío, creá un SP de consulta de ventas por país, extendelo para que también devuelva el nombre del empleado con más ventas en ese país y período, y probalo con al menos tres combinaciones de parámetros distintas. Compartí tus resultados en los comentarios.