Ejemplos Prácticos de Procedimientos Almacenados SQL Server (T-SQL)

Enviado por Chuletator online y clasificado en Francés

Escrito el en español con un tamaño de 6,59 KB

Ejemplos de Creación y Uso de Procedimientos Almacenados en SQL

1. Mostrar libros por autor

Procedimiento que recibe el nombre de un autor como parámetro para mostrar todos los libros de dicho autor.

-- 1) Crear el procedimiento
CREATE PROCEDURE pa_libros_autor 
    @autor VARCHAR(50) 
AS
SELECT titulo, editorial, precio 
FROM libros 
WHERE autor = @autor;

-- Ejecutar el procedimiento
EXEC pa_libros_autor 'Borges';

2. Mostrar libros por autor y editorial

Procedimiento que recibe dos parámetros, el nombre de un autor y el de una editorial, y muestra todos los libros de ese autor pertenecientes a la editorial especificada.

-- 2) Crear el procedimiento
CREATE PROCEDURE pa_libros_autor_editorial 
    @autor VARCHAR(50), 
    @editorial VARCHAR(30) -- Ajustado tamaño a 30 basado en uso posterior
AS
SELECT * 
FROM libros 
WHERE autor = @autor AND editorial = @editorial;

-- Ejecutar el procedimiento (orden posicional)
EXEC pa_libros_autor_editorial 'Richard Bach', 'Planeta';

-- Ejecutar el procedimiento (orden por nombre de parámetro)
EXEC pa_libros_autor_editorial @editorial='Planeta', @autor='Richard Bach';

3. Calcular el promedio de dos números

Procedimiento almacenado al cual se le envían dos números y devuelve su promedio mediante un parámetro de salida.

-- 3) Crear el procedimiento
CREATE PROCEDURE pa_promedio 
    @n1 DECIMAL(4,2), 
    @n2 DECIMAL(4,2), 
    @resultado DECIMAL(4,2) OUTPUT 
AS
SELECT @resultado = (@n1 + @n2) / 2;

-- Ejecutar el procedimiento
DECLARE @variable DECIMAL(4,2);
EXECUTE pa_promedio 5, 6, @variable OUTPUT;
SELECT @variable AS PromedioCalculado;

4. Obtener libros, suma y promedio de precios por autor

Procedimiento almacenado que muestra los títulos, editorial y precio de los libros de un autor determinado (parámetro de entrada, opcional) y devuelve la suma y el promedio de los precios de dichos libros (parámetros de salida).

-- 4) Crear el procedimiento
CREATE PROCEDURE pa_autor_sumaypromedio 
    @autor VARCHAR(30) = '%', -- Valor por defecto para incluir todos si no se especifica
    @suma DECIMAL(6,2) OUTPUT, 
    @promedio DECIMAL(6,2) OUTPUT 
AS
-- Mostrar libros del autor
SELECT titulo, editorial, precio -- Corregido 'preco' a 'precio'
FROM libros 
WHERE autor LIKE @autor;

-- Calcular suma de precios
SELECT @suma = SUM(precio) 
FROM libros 
WHERE autor LIKE @autor;

-- Calcular promedio de precios
SELECT @promedio = AVG(precio) 
FROM libros 
WHERE autor LIKE @autor;

-- Ejecutar el procedimiento
DECLARE @s DECIMAL(6,2), @p DECIMAL(6,2);
EXECUTE pa_autor_sumaypromedio 'Richard Bach', @s OUTPUT, @p OUTPUT;
SELECT @s AS total, @p AS promedio;

5. Mostrar libros por autor con validación de parámetro nulo

Procedimiento que muestra todos los libros de un autor determinado (parámetro de entrada). Si no se ingresa un valor o se ingresa NULL, muestra un mensaje de error y finaliza la ejecución.

-- 5) Crear el procedimiento
CREATE PROCEDURE pa_libros_autor_validacion -- Renombrado para evitar colisión con el #1
    @autor VARCHAR(30) = NULL 
AS
IF @autor IS NULL
BEGIN
    SELECT 'Debe indicar un autor' AS MensajeError;
    RETURN;
END;

-- Si el autor no es NULL, mostrar los libros
SELECT titulo 
FROM libros 
WHERE autor = @autor;

-- Ejecutar (caso válido)
EXEC pa_libros_autor_validacion 'Borges';

-- Ejecutar (caso inválido)
EXEC pa_libros_autor_validacion; -- Usará el valor por defecto NULL

6. Insertar libros con validación de campos obligatorios

Procedimiento almacenado que ingresa registros en la tabla "libros". Los parámetros @titulo y @autor deben tener un valor distinto de NULL; los demás son opcionales. Retorna 1 si la inserción se realiza correctamente, y 0 si el título o el autor son NULL.

-- 6) Crear el procedimiento
CREATE PROCEDURE pa_libros_ingreso 
    @titulo VARCHAR(40) = NULL, -- Añadida coma faltante
    @autor VARCHAR(30) = NULL, 
    @editorial VARCHAR(20) = NULL, 
    @precio DECIMAL(5,2) = NULL -- Corregido 'decimaul' a 'decimal'
AS
IF (@titulo IS NULL) OR (@autor IS NULL)
    RETURN 0;
ELSE
BEGIN
    INSERT INTO libros (titulo, autor, editorial, precio) 
    VALUES (@titulo, @autor, @editorial, @precio);
    RETURN 1; -- Añadido END faltante
END;

-- Ejecutar el procedimiento (caso válido)
DECLARE @retorno_ok INT;
EXEC @retorno_ok = pa_libros_ingreso 'Alicia en el país...', 'Lewis Carroll';
SELECT 'Resultado Inserción OK:' = @retorno_ok;

-- Ejecutar el procedimiento (caso inválido - autor NULL)
DECLARE @retorno_fail INT;
EXEC @retorno_fail = pa_libros_ingreso @titulo = 'Un título sin autor';
SELECT 'Resultado Inserción Fallida:' = @retorno_fail;

Entradas relacionadas: