Documente Academic
Documente Profesional
Documente Cultură
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
5
13. Realizar un procedimiento que seleccionar el promedio de los precios de los
confites.