Está en la página 1de 4

1

SQL SERVER
TEMA: PROCEDIMIENTOS ALMACENADOS

En esta oportunidad se utilizará, igualmente, la base de datos Northwind, que es


una base de datos de ejemplo la cual se puede descargar desde Internet y con
ella realizar los siguientes ejercicios:

PROCEDIMIENTOS ALMACENADOS

1. Todos los productos que inicien con un carácter (o varios) en especial

CREATE PROCEDURE pa_Producs_x_Name


@ProductName varchar(50)
AS
SELECT * FROM Products
WHERE Productname LIKE @ProductName+'%'

--Se ejecuta el procedimiento almacenado y luego se ejecuta


---Probar
execute pa_Producs_x_Name 'A'

2. Seleccionar el nombre del producto y su precio localizado por su campo código


(ProductID). Este procedimiento utiliza 3 parámetros: 1 tipo INPUT (ProductID)
y dos de salida OUTPUT (ProductName y UnitPrice). Dentro del procedimiento, los
campos del registro seleccionado son guardados en los parámetros de salida y
luego, fuera del procedimiento, se los transfieren a variables de memoria las que
se visualizan con SELECT dándoles un ALIAS para visualización.

CREATE PROCEDURE pa_Producs_Traer_Nombre_Precio


@ProductID int,
@ProductName varchar(50) output,
@UnitPrice Money output
AS
SELECT @ProductName = ProductName,
@UnitPrice = UnitPrice
FROM Products
WHERE ProductID = @ProductID

--Luego de ejecutar el procedimiento anterior se procede a ejecutarlo.


---Probar

declare @Nombre varchar(50), @Precio Money


Execute pa_Producs_Traer_Nombre_Precio
10, @Nombre OUTPUT, @Precio OUTPUT
SELECT @Nombre AS Nombre, @Precio AS Precio
2
3. Procedimiento almacenado que cuente los productos que empiezan
con un determinado character ( o caracteres)

CREATE PROCEDURE pa_Product_cantidad


@ProductName varchar(50)
AS
DECLARE @Cantidad int
SELECT @Cantidad = COUNT(*)
FROM Products
WHERE productName LIKE @ProductName+'%'
RETURN @Cantidad

/* NOTE el uso del return al final del procedimieto


en este ejemplo.
La variable @Cantidad a pesar de ser definida
como una variable de entrada, es colocada después
del return para enviar este valor a la variable que sucede
al exec. (similar a una función)

---Probar
DECLARE @R int
EXECUTE @R = pa_Product_cantidad 'A'
SELECT @R AS Cantidad

4. Modifique el procedimiento anterior, de tal forma que en lugar de


seleccionar por el campo (ProductName) se realice de acuerdo al código
de la categoría (CategoryID). Haga los ajustes necesarios.

5. Corra los siguientes ejemplos y vea que

Create procedure pa_Products_Todos


AS
SELECT *
FROM Products

--Probar
pa_Products_Todos
--Observe que funciona con solo colocar el nombre del procedimiento
exec pa_Products_Todos
execute pa_Products_Todos

--Ejemplo 2
--Parámetro de salida
CREATE PROCEDURE pa_Producs_PrecioMayor
@Precio money OUTPUT
AS
SELECT @precio = MAX(unitPrice) FROM Products

--Probar
3
DECLARE @p money
execute pa_Producs_PrecioMayor @p OUTPUT
SELECT @p

-----Nota
--ALTER PROCEDURE para modificar el procedimiento

--Ejemplo 3
--Procedimiento con valor de re3torno

CREATE PROCEDURE pa_Products_cantidad


AS
DECLARE @cantidad int
SELECT @cantidad = COUNT(*) FROM Products
RETURN @cantidad

--Probar
DECLARE @r int
execute @r = pa_Products_cantidad
select @r

--Ejercicio 1
--Realizar un procedimiento almacenado que devuelva el precio mayor y
--el precio menor de según la categoría
--Obs. Ambas tablas están relacionadas por el campo CategoryID
---respuestas

CREATE PROCEDURE pa_Producs_PrecioMayor_PrecioMenor


@categoriaName varchar(40),
@PrecioMayor money OUTPUT,
@PrecioMenor money OUTPUT
AS
SELECT @PrecioMayor = MAX(p.unitPrice),
@PrecioMenor = MIN(p.unitPrice)
FROM Products AS p INNER JOIN categories AS c
ON p.CategoryID = c.CategoryID
WHERE c.CategoryName LIKE @CategoriaName + '%'

---Probar
DECLARE @p money
DECLARE @q money
exec pa_Producs_PrecioMayor_PrecioMenor 'Confections', @p OUTPUT, @q
OUTPUT
SELECT @p, @q
SELECT @p AS PRECIO_MAYOR , @q AS PRECIO_MENOR

--Ejercicio 2
4
--Realizar un procedimiento que permita eliminar el cliente (Customers) según su
identificación (CustomerID). Si existe el cliente en la tabla ORDERS devuelve 1
(No se puede eliminar) caso contrario devuelve 0 (Se eliminó).

CREATE PROCEDURE pa_Clientes_Eliminar


@CustomerID varchar(50)
AS
DECLARE @r int
IF EXISTS (SELECT * FROM orders WHERE CustomerID = @CustomerID )
RETURN 1
ELSE
DELETE FROM Customers WHERE CustomerID = @CustomerID
RETURN 0
RETURN @r

DECLARE @r int
execute @r = pa_Clientes_Eliminar 'PEDRO'
SELECT @r AS Valor_de_retorno

DECLARE @r int
execute @r = pa_Clientes_Eliminar 'LILAS'
SELECT @r AS Valor_de_retorno

También podría gustarte