SQL Server

Parámetros OUTPUT en Stored Procedures SQL Server explicado fácil con ejemplos reales

Publicado por J. Panduro hace 4 meses

Parámetros OUTPUT en Stored Procedures SQL Server explicado fácil con ejemplos reales

Cuando trabajas con Stored Procedures en SQL Server, muchas veces necesitas devolver valores desde el procedimiento hacia la aplicación o hacia otra consulta SQL.


Ahí es donde entran los parámetros OUTPUT.


Con ellos puedes:


  1. Retornar IDs generados
  2. Devolver mensajes
  3. Obtener totales
  4. Validar operaciones
  5. Crear lógica empresarial avanzada


En este artículo aprenderás:


  1. Qué es un parámetro OUTPUT
  2. Cómo funciona
  3. Casos reales empresariales
  4. Ejemplos prácticos
  5. Ejercicios tipo entrevista


¿Qué es un parámetro OUTPUT?


Un parámetro OUTPUT en SQL Server permite que un Stored Procedure devuelva uno o varios valores al proceso que lo invoca. A diferencia de los parámetros de entrada, que se utilizan para enviar información al procedimiento almacenado, los parámetros OUTPUT se utilizan para devolver resultados calculados durante su ejecución.


Su funcionamiento es similar al return presente en muchos lenguajes de programación, aunque con una ventaja importante: un procedimiento almacenado puede devolver múltiples valores mediante varios parámetros OUTPUT al mismo tiempo.

Esta característica resulta muy útil en aplicaciones empresariales donde es necesario obtener información adicional después de ejecutar una operación.


Por ejemplo, al registrar un nuevo cliente se podría devolver el identificador generado automáticamente, o al procesar una venta se podría retornar el número de comprobante creado.


Ejemplo conceptual

CREATE PROCEDURE sp_Ejemplo
(
@Total INT OUTPUT
)
AS
BEGIN

SET @Total = 100;

END;


El SP devuelve el valor 100


Dataset completo (copiar y ejecutar)

-- =========================================
-- ELIMINAR TABLA SI EXISTE
-- =========================================
IF OBJECT_ID('Clientes', 'U') IS NOT NULL
DROP TABLE Clientes;

-- =========================================
-- CREAR TABLA
-- =========================================
CREATE TABLE Clientes (
IdCliente INT IDENTITY(1,1) PRIMARY KEY,
Nombre VARCHAR(100) NOT NULL,
Email VARCHAR(100) NOT NULL,
FechaCreacion DATETIME DEFAULT GETDATE()
);

-- =========================================
-- INSERTAR DATOS
-- =========================================
INSERT INTO Clientes (Nombre, Email)
VALUES
('Juan Pérez', 'juan@email.com'),
('Ana López', 'ana@email.com'),
('Carlos Ruiz', 'carlos@email.com');


Primer ejemplo OUTPUT

Obtener cantidad total de clientes.


CREATE PROCEDURE sp_TotalClientes
(
@TotalClientes INT OUTPUT
)
AS
BEGIN

SELECT @TotalClientes = COUNT(*)
FROM Clientes;

END;


Ejecutar Stored Procedure OUTPUT


DECLARE @Resultado INT;

EXEC sp_TotalClientes
@TotalClientes = @Resultado OUTPUT;

SELECT @Resultado AS TotalClientes;




El SP guarda el valor dentro de "Resultado"



Caso real empresarial


Retornar ID recién insertado.

Muy usado en sistemas web


SP para insertar cliente y devolver ID


CREATE PROCEDURE sp_InsertarCliente
(
@Nombre VARCHAR(100),
@Email VARCHAR(100),

@IdGenerado INT OUTPUT
)
AS
BEGIN

INSERT INTO Clientes
(
Nombre,
Email
)
VALUES
(
@Nombre,
@Email
);

SET @IdGenerado = SCOPE_IDENTITY();

END;


¿Qué es SCOPE_IDENTITY()?


SCOPE_IDENTITY() es una función de SQL Server que permite obtener el último valor IDENTITY generado dentro del mismo ámbito o scope de ejecución. Generalmente se utiliza inmediatamente después de ejecutar una instrucción INSERT para recuperar el identificador automático que fue asignado al nuevo registro.


Esta función es especialmente útil cuando una tabla utiliza una columna IDENTITY como clave primaria, ya que permite conocer el identificador generado sin necesidad de realizar consultas adicionales sobre la tabla. De esta manera, es posible utilizar dicho valor para insertar información relacionada en otras tablas o devolverlo a una aplicación.


Por ejemplo, al registrar un nuevo pedido en una tabla de ventas, SQL Server puede generar automáticamente un identificador único para ese pedido. Utilizando SCOPE_IDENTITY(), el sistema puede recuperar ese identificador y utilizarlo posteriormente para registrar los detalles de la venta, los productos asociados o los movimientos de inventario relacionados.


DECLARE @NuevoId INT;

EXEC sp_InsertarCliente
@Nombre = 'María Torres',
@Email = 'maria@email.com',
@IdGenerado = @NuevoId OUTPUT;

SELECT @NuevoId AS IdNuevoCliente;



OUTPUT con mensajes

También puedes devolver mensajes.


CREATE PROCEDURE sp_ValidarCliente
(
@IdCliente INT,
@Mensaje VARCHAR(100) OUTPUT
)
AS
BEGIN

IF EXISTS (
SELECT 1
FROM Clientes
WHERE IdCliente = @IdCliente
)
BEGIN
SET @Mensaje = 'Cliente encontrado';
END
ELSE
BEGIN
SET @Mensaje = 'Cliente no existe';
END

END;



Ejecutar validación


DECLARE @Resultado VARCHAR(100);

EXEC sp_ValidarCliente
@IdCliente = 1,
@Mensaje = @Resultado OUTPUT;

SELECT @Resultado AS Mensaje;


OUTPUT + COUNT

Clientes registrados por dominio email.


CREATE PROCEDURE sp_ClientesGmail
(
@Total INT OUTPUT
)
AS
BEGIN

SELECT @Total = COUNT(*)
FROM Clientes
WHERE Email LIKE '%gmail.com%';

END;


Ejercicios tipo entrevista


Nivel básico

Crear SP que devuelva cantidad de clientes.


CREATE PROCEDURE sp_TotalClientes
(
@Total INT OUTPUT
)
AS
BEGIN

SELECT @Total = COUNT(*)
FROM Clientes;

END;


Nivel intermedio

Insertar cliente y devolver ID generado.


CREATE PROCEDURE sp_InsertarCliente
(
@Nombre VARCHAR(100),
@IdGenerado INT OUTPUT
)
AS
BEGIN

INSERT INTO Clientes (Nombre, Email)
VALUES (@Nombre, 'demo@email.com');

SET @IdGenerado = SCOPE_IDENTITY();

END;


Nivel entrevista real

Validar si cliente existe y devolver mensaje.


CREATE PROCEDURE sp_ExisteCliente
(
@IdCliente INT,
@Mensaje VARCHAR(100) OUTPUT
)
AS
BEGIN

IF EXISTS (
SELECT 1
FROM Clientes
WHERE IdCliente = @IdCliente
)
BEGIN
SET @Mensaje = 'Existe';
END
ELSE
BEGIN
SET @Mensaje = 'No existe';
END

END;


Conclusión


Dominar los parámetros OUTPUT en SQL Server te permitirá crear procedimientos almacenados más profesionales y útiles para aplicaciones reales.

Son muy usados en:


  1. Sistemas web
  2. APIs
  3. ERPs
  4. Dashboards
  5. Procesos empresariales



Sobre el autor

J. Panduro es desarrollador de software y creador de HPanduDigital. Comparte contenido sobre Desarrollo Web, inteligencia artificial, y transformación digital, basado en experiencias reales y proyectos prácticos.

Buscar artículos

Escribe al menos 2 caracteres para buscar.