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;