Stored Procedures en SQL Server
Clase 12 de 26 • Curso de Gestión de Bases de Datos con SQL Server
Contenido del curso
Clase 12 de 26 • Curso de Gestión de Bases de Datos con SQL Server
Contenido del curso
José Bernardo Navas Pleitez
jefred bedoya
Pablo Núñez
Rubens A. Rangel Gomez
Comparto resultados del SP consulta de ventas por país y empleado con mas ventas de cada país
CREATE OR ALTER PROCEDURE SP_ConsultarVentasPorPais @CodigoPais NVARCHAR(2) = NULL, @FechaInicio DATE = NULL, @FechaFin DATE = NULL AS BEGIN SET NOCOUNT ON; SET @FechaFin = ISNULL(@FechaFin, CAST(GETDATE() AS DATE)); SET @FechaInicio = ISNULL(@FechaInicio, DATEADD(YEAR, -1, @FechaFin)); ;WITH VentasEmpleado AS ( SELECT pa.PaisID, e.EmpleadoID, e.Nombre AS NombreEmpleado, SUM(p.Total) AS VentasEmpleado, ROW_NUMBER() OVER ( PARTITION BY pa.PaisID ORDER BY SUM(p.Total) DESC ) AS RN FROM Pedidos p INNER JOIN Clientes c ON p.ClienteID = c.ClienteID INNER JOIN Paises pa ON c.PaisID = pa.PaisID INNER JOIN Empleados e ON p.EmpleadoID = e.EmpleadoID WHERE (@CodigoPais IS NULL OR pa.CodigoPais = @CodigoPais) AND p.FechaPedido >= @FechaInicio AND p.FechaPedido < DATEADD(DAY, 1, @FechaFin) AND p.Estado = 'Completado' GROUP BY pa.PaisID, e.EmpleadoID, e.Nombre ) SELECT pa.NombrePais, pa.CodigoPais, COUNT(p.PedidoID) AS TotalPedidos, SUM(p.Total) AS VentasTotales, AVG(p.Total) AS TicketPromedio, ve.NombreEmpleado AS EmpleadoTopVentas, ve.VentasEmpleado AS VentasEmpleadoTop FROM Pedidos p INNER JOIN Clientes c ON p.ClienteID = c.ClienteID INNER JOIN Paises pa ON c.PaisID = pa.PaisID LEFT JOIN VentasEmpleado ve ON pa.PaisID = ve.PaisID AND ve.RN = 1 WHERE (@CodigoPais IS NULL OR pa.CodigoPais = @CodigoPais) AND p.FechaPedido >= @FechaInicio AND p.FechaPedido < DATEADD(DAY, 1, @FechaFin) AND p.Estado = 'Completado' GROUP BY pa.NombrePais, pa.CodigoPais, pa.PaisID, ve.NombreEmpleado, ve.VentasEmpleado ORDER BY VentasTotales DESC; END; GO EXEC SP_ConsultarVentasPorPais; -- TODOS LOS PAISES, ULTIMO AÑO EXEC SP_ConsultarVentasPorPais @CodigoPais = 'MX'; -- SOLO MEXICO , ULTIMO AÑO EXEC SP_ConsultarVentasPorPais @FechaInicio = '2024-06-01', @FechaFin = '2024-12-31'; EXEC SP_ConsultarVentasPorPais @CodigoPais = 'MX',@FechaInicio = '2024-06-01', @FechaFin = '2024-12-31';
Los Stored Procedures son bloques de código precompilados que centralizan la lógica en el servidor. Reducen el tráfico de red y blindan la base de datos contra inyecciones SQL mediante el uso de parámetros.
Sus pilares son la reutilización de código, la seguridad mediante permisos granulares y el rendimiento gracias a su ejecución optimizada. ¿Qué proceso de tu base de datos actual se beneficiaría más de este nivel de encapsulamiento?
Exacto. Si intentas filtrar una vista enorme desde Power BI, estás forzando a la herramienta a descargar un volumen de datos innecesario para luego procesarlo localmente. Eso es un desperdicio de recursos y una receta para reportes lentos.
El SP es tu contrato de eficiencia: le pides a SQL que haga el trabajo pesado y solo te entregue el resultado final.
¿Qué crees que sucedería si, en lugar de filtrar, intentaras hacer cálculos complejos (como promedios o totales) directamente en Power BI en lugar de dentro de tu SP?
Los stored procedures existen en SQL Server, MySQL y PostgreSQL, aunque con diferencias de sintaxis y ejecución. La idea central es la misma: automatizar procesos repetitivos, centralizar la lógica y mejorar eficiencia y seguridad. SQL Server y MySQL usan nombres propios y ejecución directa (EXEC/CALL), mientras que PostgreSQL históricamente usaba funciones (FUNCTION), aunque ahora también tiene PROCEDURE