Sunteți pe pagina 1din 5

/*

1. Hacer un TRIGGER denominado TR_stock_dventas, que despues de


insertar una fila a la tabla dventas
valide si hay stock suficiente del producto (usar
PA_HayStockxAlmacen), si no hay Stock suficiente se
debe cancelar el INSERT usando ROLLBACK
*/
CREATE TRIGGER TR_stock_dventas
ON dventas
FOR INSERT
AS
DECLARE @nvta INT,@cprd INT,@cant DECIMAL,@stock DECIMAL,@calm
INT
SELECT @nvta=nvta,@cprd=cprd,@cant=cant FROM INSERTED
SELECT @calm=calm FROM pventas WHERE nvta=@nvta
EXECUTE PA_StockxAlmacen @cprd,@calm,@stock output
IF (@cant>@stock)
BEGIN
RAISERROR('El Producto no tiene Stock
Suficiente....',16,1)
ROLLBACK
RETURN
END
--PRUEBA
INSERT INTO dventas VALUES(1,2,20,10,200)

/*
2. Hacer un TRIGGER denominado TR_del_dventas, que después de
borrar una fila en la tabla dventas
actualice el Importe Total en la tabla pventas (usar
PA_TotalPreVenta).
*/
CREATE TRIGGER TR_del_dventas
ON dventas
FOR DELETE
AS
DECLARE @itot DECIMAL,@nvta INT
SELECT @nvta=nvta FROM DELETED
EXECUTE PA_TotalPreVenta @nvta,@itot OUTPUT
UPDATE pventas SET itot=@itot WHERE nvta=@nvta

--PRUEBA
DELETE dventas WHERE nvta=1 AND cprd =2

/*
3. Hacer un TRIGGER denominado TR_ins_dventas, que después de
insertar una fila en la tabla dventas
actualice el Importe Total en la tabla pventas (usar
PA_TotalPreVenta).
*/
CREATE TRIGGER TR_ins_dventas
ON dventas
FOR INSERT
AS
DECLARE @itot DECIMAL,@nvta INT
SELECT @nvta=nvta FROM INSERTED
EXECUTE PA_TotalPreVenta @nvta,@itot OUTPUT
UPDATE pventas SET itot=@itot WHERE nvta=@nvta

--PRUEBA
INSERT INTO dventas VALUES (1,2,25,2,50)
INSERT INTO dventas VALUES (2,1,1,2,8)
/*
4. Hacer un TRIGGER denominado TR_upd_dventas, que después de
actualizar una fila en la tabla dventas
actualice el Importe Total (itot) en la tabla pventas (usar
PA_TotalPreVenta).
*/
CREATE TRIGGER TR_upd_dventas
ON dventas
FOR UPDATE
AS
DECLARE @iTot DECIMAL,@nvta INT
SELECT @nvta=nvta FROM INSERTED
EXECUTE PA_TotalPreVenta @nvta, @iTot OUTPUT
UPDATE pventas SET itot=@iTot WHERE nvta=@nvta

-- prueba
UPDATE dventas SET cant=1,impt=50
WHERE nvta=1 and cprd=2

/*
5. Hacer un TRIGGER denominado TR_del_dventas, que después de
borrar una fila en la tabla dventas
actualice el Importe de descuento (ides) en la tabla pventas (usar
PA_DescPreVenta). Ademas si ya no
hay mas filas para esa venta en la tabla dventas que también
eliminé la filade la tabla pventas.
*/
CREATE TRIGGER TR_del_dventas
ON dventas
FOR DELETE
AS
DECLARE @nvta INT,@ides DECIMAL(10,2)
SELECT @nvta=nvta FROM DELETED
EXECUTE PA_DescPreVenta @nvta,@ides OUTPUT
UPDATE pventas SET ides=@ides WHERE nvta=@nvta
IF(@ides = 0) DELETE pventas WHERE nvta=@nvta

--PRUEBA
DELETE dventas WHERE nvta=1 AND cprd =1
DELETE dventas WHERE nvta=2 AND cprd =1
select * from pventas
select * from dventas
/*
6. Hacer un TRIGGER denominado TR_ins_dventas, que después de
insertar una fila en la tabla dventas actualice el
Importe de descuento (ides) en la tabla pventas (usar
PA_DescPreVenta).
*/
CREATE TRIGGER TR_ins_dventas
ON dventas
FOR INSERT
AS
DECLARE @nvta INT,@ides DECIMAL(10,2)
SELECT @nvta=nvta FROM INSERTED
EXECUTE PA_DescPreVenta @nvta,@ides OUTPUT
UPDATE pventas SET ides=@ides WHERE nvta=@nvta

--PRUEBA
INSERT INTO dventas VALUES (1,3,4,2,8)

/*
7. Hacer un TRIGGER denominado TR_upd_dventas, que después de
actualizar una fila en la tabla dventas actualice el
Importe de descuento (ides) en la tabla pventas (usar
PA_DescPreVenta).
*/
CREATE TRIGGER TR_upd_dventas
ON dventas
FOR UPDATE
AS

DECLARE @nvta INT,@ides DECIMAL(10,2)


SELECT @nvta=nvta FROM INSERTED
EXECUTE PA_DescPreVenta @nvta,@ides OUTPUT
UPDATE pventas SET ides=@ides WHERE nvta=@nvta

--PRUEBA
UPDATE dventas SET impt=10 WHERE nvta=1 AND cprd=1

/*
8. Hacer un TRIGGER denominado TR_del_PreVentas, que borre toda la
venta incluyendo su detalle (usar PA_DelPreVentas).
*/
CREATE TRIGGER TR_del_PreVentas
ON pventas
FOR DELETE
AS
DECLARE @nvta INT
SELECT @nvta=nvta FROM DELETED
EXECUTE PA_DelPreVentas @nvta

--PRUEBA
DELETE pventas WHERE nvta=1
/*
9. Hacer un TRIGGER denominado TR_ins_log, que despues de insertar
una fila en la tabla pventas inserte los
datos en la tabla log_pventas
*/
CREATE TRIGGER TR_ins_log
ON pventas
FOR INSERT
AS
DECLARE @nvta INT
SELECT @nvta=nvta FROM INSERTED
INSERT INTO log_pventas VALUES(@nvta,GETDATE() , USER,'I')

--prueba
INSERT INTO pventas VALUES(4,'clienteD',1,GETDATE(),0,0)

select * FROM pventas


select * from log_pventas

/*
10. Hacer un TRIGGER denominado TR_del_log, que despues de borarr
una fila en la tabla pventas inserte los
datos en la tabla log_pventas
*/
CREATE TRIGGER TR_del_log
ON pventas
FOR DELETE
AS
DECLARE @nvta INT
SELECT @nvta=nvta FROM DELETED
INSERT INTO log_pventas VALUES(@nvta,GETDATE(),USER,'D')

--prueba
DELETE pventas WHERE nvta=2

select * FROM pventas


select * from log_pventas

/*
11. Hacer un TRIGGER denominado TR_upd_log, que despues de
actualizar una fila en la tabla pventas inserte
los datos en la tabla log_pventas
*/
CREATE TRIGGER TR_upd_log
ON pventas
FOR UPDATE
AS
DECLARE @nvta INT
SELECT @nvta=nvta FROM INSERTED
INSERT INTO log_pventas VALUES(@nvta,GETDATE(),USER,'U')

--prueba
UPDATE pventas SET calm=3 WHERE nvta=2

select * FROM pventas


select * from log_pventas

select * from dventas

--******************************** PA
--PA para 1
CREATE PROCEDURE PA_StockxAlmacen(@cprd INT,@calm INT,@stock
DECIMAL(10,2) OUTPUT)
AS
SELECT @stock=isnull(sum(cant),0) FROM sumi
WHERE cprd=@cprd AND calm=@calm
RETURN
--PA para 2,3 y 4
DROP PROCEDURE PA_TotalPreVenta
CREATE PROCEDURE PA_TotalPreVenta (@nvta INT,@itot DECIMAl OUTPUT)
AS
SET @itot=0
SELECT @itot=isnull(sum(impt),0) FROM dventas WHERE nvta=@nvta

RETURN
--PA para 5,6 y 7
CREATE PROCEDURE PA_DescPreVenta(@nvta INT,@impdes DECIMAL(10,2)
OUTPUT)
AS
DECLARE @itot INT
EXECUTE PA_TotalPreVenta @nvta,@itot output
SET @impdes = @itot
IF(@itot >= 10 AND @itot <= 20) SET @impdes=@itot-(@itot*0.10)
IF(@itot >= 11 AND @itot <= 50) SET @impdes=@itot-(@itot*0.15)
IF(@itot > 50) SET @impdes=@itot-(@itot*0.20)
RETURN
--PA 8
CREATE PROCEDURE PA_DelPreVentas (@nvta INT)
AS
DELETE dventas WHERE nvta=@nvta
RETURN

S-ar putea să vă placă și