You are on page 1of 5

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 carcter (o varios) en especial
CREATE PROCEDURE usp_Producs_x_Name
@ProductName varchar(50)
AS
SELECT * FROM Products
WHERE Productname LIKE @ProductName+'%'
GO
Se ejecuta el procedimiento almacenado y luego se ejecuta
---Probar
execute usp_Producs_x_Name 'A'
2. Seleccionar el nombre del producto y su precio localizado por su campo cdigo
(ProductID). Esyte procedimiento utiliza 3 parmetros: 1 tipo INPUT (ProductID)
y dos de salida OUTPUT (ProductName y UnitPrice). Dentro del procedimiento, los
campos del registro seleccionado son guardados en los parmetros de salida y
luego, fuera del procedimiento, se los transfieren a variables de memoria las que
se visualizan con SELECT dndoles un ALIAS para visualizacin.
CREATE PROCEDURE usp_Producs_Traer_Nombre_Precio
@ProductID int,
@ProductName varchar(50) output,
@UnitPrice Money output
AS
SELECT @ProductName = ProductName,
@UnitPrice = UnitPrice
FROM Products
WHERE ProductID = @ProductID
GO
Luego de ejecutar el procedimiento anterior se procede a ejecutarlo.
---Probar
declare @Nombre varchar(50), @Precio Money
Execute usp_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 usp_Product_cantidad
@ProductName varchar(50)
AS
DECLARE @Cantidad int
SELECT @Cantidad = COUNT(*)
FROM Products
WHERE productName LIKE @ProductName+'%'
RETURN @Cantidad
GO
---Probar
DECLARE @R int
EXECUTE @R = usp_Product_cantidad 'A'
SELECT @R AS Cantidad
1. Realizar procedimientos almacenados similares pero que en lugar de
seleccionar por campo nombre del producto (ProductName) se realice de
acuerdo al cdigo de la categora (CategoryID).
Otros ejemplos:
Create procedure usp_Products_Todos
AS
SELECT *
FROM Products
GO
--Probar
usp_Products_Todos
exec usp_Products_Todos
execute usp_Products_Todos
--Ejemplo 2
--Parmetro de salida
CREATE PROCEDURE usp_Producs_PrecioMayor
@Precio money OUTPUT
AS
SELECT @precio = MAX(unitPrice) FROM Products
GO
--Probar
DECLARE @p money
execute usp_Producs_PrecioMayor @p OUTPUT
SELECT @p
-----Nota
--ALTER PROCEDURE para modificar el procedimiento

3
--Ejemplo 3
--Procedimiento con valor de re3torno
CREATE PROCEDURE usp_Products_cantidad
AS
DECLARE @cantidad int
SELECT @cantidad = COUNT(*) FROM Products
RETURN @cantidad
GO
--Probar
DECLARE @r int
execute @r = usp_Products_cantidad
select @r
--Ejercicio 1
--Realizar un procedimiento almacenado que devuelva el precio mayor y
--el precio menor de segn la categora
--Obs. Ambas tablas estn relacionadas por el campo CategoryID
---respuestas
CREATE PROCEDURE usp_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 = p.CategoryID
WHERE c.CategoryName LIKE @CategoriaName + '%'
GO
---Probar
DECLARE @p money
DECLARE @q money
exec usp_Producs_PrecioMayor_PrecioMenor 'Confections', @p OUTPUT, @q
OUTPUT
SELECT @p, @q
SELECT @p AS PRECIO_MAYOR , @q AS PRECIO_MENOR
--Ejercicio 2
--Realizar un procedimiento que permita eliminar el cliente (Customers) segn su
identificacin (CustomerID). Si existe el cliente en la tabla ORDERS devuelve 1
(No se puede eliminar) caso contrario devuelve 0 (Se elimin).
ALTER PROCEDURE usp_Clientes_Eliminar
@CustomerID varchar(50)

4
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
GO
DECLARE @r int
execute @r = usp_Clientes_Eliminar 'PEDRO'
SELECT @r AS Valor_de_retorno
DECLARE @r int
execute @r = usp_Clientes_Eliminar 'LILAS'
SELECT @r AS Valor_de_retorno
Ejercicios utilizando la base de datos Northwind.
1. Realizar un procedimiento almacenado
(Customers) segn el pas (Country).

que

devuelva

los

clientes

2. Crear un procedimiento que determine la cantidad de clientes cuyo


identificador (o sea el cdigo) inicia con un determinado carcter.
3. Realizar un procedimiento que determine la cantidad de registros que un
cliente est en la tabla ORDERS.
4. Realizar una base de datos similar a Northwind, pero que los nombre de
tablas, campos y registros estn en castellano.
5. Realizar un procedimiento que seleccione todos los registros de tabla
Productos y Categories a la vez.
6. Realizar un procedimiento que seleccione todos los productos que no
corresponde a la categora bebidas (1)
7. Realizar un procedimiento que obtenga la cantidad de registros que no
corresponde a condimentos
8. Realizar un procedimiento que seleccionar todos los campos de los registros
que no corresponden a categora mariscos de la tabla productos.
9. Realizar un procedimiento que seleccionar los campos nombre del producto
y precio (nicamente) de los productos diferentes a crnicos.
10. Realizar un procedimiento que obtenga la cantidad de productos granos y
cereales.
11. Realizar un procedimiento que seleccionar los campos nombre del
producto y precio (nicamente) de los quesos y productos crnicos.
12. Realizar un procedimiento que seleccionar los campos nombre del
producto, precio y stock (nicamente) de las frutas secas y mariscos.

5
13. Realizar un procedimiento que seleccionar el promedio de los precios de los
confites.