FUNCIONES SQL
SERVER – NORTHWIND
Funciones escalar y de tabla con explicación paso a
paso
🎯 OBJETIVO DEL
DOCUMENTO
• Presentar dos ejemplos funcionales de creación de
funciones en SQL Server usando la base de datos
Northwind, explicando cada línea de código para
facilitar su uso académico o profesional.
FUNCIÓN 1:
UFN_EMPLEADONOMBRECOMPLETO
• IF OBJECT_ID(N'dbo.ufn_EmpleadoNombreCompleto', N'FN') IS NOT NULL
• DROP FUNCTION dbo.ufn_EmpleadoNombreCompleto;
• GO
• CREATE FUNCTION dbo.ufn_EmpleadoNombreCompleto(@EmployeeID INT)
• RETURNS NVARCHAR(101)
• AS
• BEGIN
• DECLARE @NombreCompleto NVARCHAR(101);
• SELECT @NombreCompleto = FirstName + N' ' + LastName
• FROM Employees
• WHERE EmployeeID = @EmployeeID;
• RETURN @NombreCompleto;
• END;
• GO
EXPLICACIÓN –
FUNCIÓN ESCALAR
• - Verifica existencia con OBJECT_ID
• - DROP FUNCTION elimina si existe
• - GO separa el bloque
• - Crea función escalar con parámetro @EmployeeID
• - Concatena FirstName + LastName
• - RETURN devuelve el nombre completo
USO DE LA FUNCIÓN
ESCALAR
• SELECT
dbo.ufn_EmpleadoNombreCompleto(
5) AS NombreCompleto;
La función
dbo.ufn_EmpleadoNombreCompleto
es una función escalar en SQL Server,
y lo que hace es devolver el nombre
completo de un empleado (nombre y
apellido concatenados) a partir de su
EmployeeID.
Explicación paso a paso:
[Link]ámetro de entrada:
•@EmployeeID INT: recibe el identificador del empleado
que se desea buscar.
[Link] local:
•@NombreCompleto NVARCHAR(101): se declara para
guardar el resultado (nombre + apellido).
[Link]:
•Se busca en la tabla Employees el FirstName y el
LastName del empleado cuyo EmployeeID coincida con
el parámetro recibido.
•Luego se concatenan con un espacio (' ') y se asignan a la
variable @NombreCompleto.
[Link]:
•La función devuelve la cadena con el nombre completo del
empleado.
¿Por qué esta función es escalar?
En SQL Server, un valor •Recibe un parámetro
escalar es un único valor de un
(@EmployeeID)
tipo de dato simple, como: •Hace una consulta
•INT
•NVARCHAR interna
•Y devuelve un solo
•DATETIME
•DECIMAL valor tipo
•etc. NVARCHAR(101),
que es el nombre
Es decir, no devuelve una tabla
completo del
o un conjunto de filas y
empleado.
columnas, sino una sola celda.
FUNCIÓN 2:
UFN_VENTASPORCLIENT
•
E
IF OBJECT_ID(N'dbo.ufn_VentasPorCliente', N'IF') IS NOT NULL
• DROP FUNCTION dbo.ufn_VentasPorCliente;
• GO
• CREATE FUNCTION dbo.ufn_VentasPorCliente(@FechaInicio DATE, @FechaFin DATE)
• RETURNS TABLE
• AS
• RETURN (
• SELECT [Link], [Link],
• SUM([Link] * [Link] * (1 - [Link])) AS TotalVentas
• FROM Orders o
• JOIN Customers c ON [Link] = [Link]
• JOIN [Order Details] od ON [Link] = [Link]
• WHERE [Link] BETWEEN @FechaInicio AND @FechaFin
• GROUP BY [Link], [Link]
• );
• GO
EXPLICACIÓN –
FUNCIÓN TABLA
• - Verifica existencia con OBJECT_ID
• - DROP FUNCTION elimina si existe
• - Crea función tabla con parámetros de fecha
• - Devuelve ventas totales por cliente
• - Usa JOIN con Orders, Customers y Order Details
• - Aplica descuentos y agrupa por cliente
USO DE LA FUNCIÓN
TABLA
SELECT *
FROM dbo.ufn_VentasPorCliente('1997-01-01', '1997-12-31')
ORDER BY TotalVentas DESC;
Esta es una función con valor de tabla en
línea (inline table-valued function) que
devuelve una tabla con el total de
ventas por cliente en un rango de fechas
especificado.
[Link] interna (lo que devuelve la
función):
RETURN ( SELECT [Link],
[Link], SUM([Link] *
[Link] * (1 - [Link])) AS
Explicación paso a paso: TotalVentas FROM Orders o JOIN
[Link]ón y eliminación previa: Customers c ON [Link] =
[Link]ón de la función: [Link] JOIN [Order Details] od
CREATE FUNCTION ON [Link] = [Link] WHERE
dbo.ufn_VentasPorCliente(@FechaIni [Link] BETWEEN @FechaInicio
cio DATE, @FechaFin DATE) AND @FechaFin GROUP BY
RETURNS TABLE [Link], [Link] );
•La función recibe dos parámetros: •Se unen las tablas Orders,
•@FechaInicio → Fecha Customers y [Order Details].
inicial del período. •Se filtran los pedidos según la
•@FechaFin → Fecha final fecha (OrderDate entre inicio y
del período. fin).
•Devuelve una tabla con información •Se agrupan los resultados por
agregada. cliente (CustomerID y
CompanyName).
•Se calcula el total de ventas con
descuento:
TotalVentas = Precio * Cantidad * (1 -
Descuento)
¿Por qué es una función de tabla?
Porque devuelve un conjunto de filas y
columnas, y no un solo valor escalar. Por eso se
le llama:
•Table-valued function (función con valor de
tabla)
•En este caso, inline, porque el cuerpo de la
función es directamente una sola instrucción
SELECT.
CONCLUSIÓN
• - Funciones escalar: retornan un solo valor útil.
• - Funciones tabla: permiten consultas reutilizables y
complejas.
• - Mejora del rendimiento, reutilización de lógica,
seguridad.
• - Facilitan análisis y reportes personalizados en SQL
Server.