Sei sulla pagina 1di 4

----2.

-CREAR UN TRIGGER QUE PERMITA GRABAR EN UNA TABLA, LOS DATOS ANTIGUOS Y NUEVOS
---- CUANDO SE MODIFIQUE EL NOMBRE O LA DIRECCION O EL TELEFONO DE UN CLIENTE

CREATE TABLE AUDIT_CLIENTE(


FECHA DATE,
CODCLI CHAR(4),
NOMCLI VARCHAR(40),
DIREC VARCHAR(40),
TELEF VARCHAR(9),
USUARIO VARCHAR(30),
ESTADO VARCHAR(8))
GO

ALTER TRIGGER MODIFICA_CLIENTE


ON CLIENTES
FOR UPDATE
AS
IF(UPDATE(NOMCLI)OR UPDATE(DIREC)OR UPDATE(TELEF))
BEGIN
DECLARE @CODC CHAR(4), @NOMC VARCHAR(40), @DIR VARCHAR(40), @TLF VARCHAR(9)
--- DATOS ANTIGUOS
SELECT @CODC=CODCLI, @NOMC=NOMCLI, @DIR=DIREC, @TLF=TELEF FROM DELETED
INSERT INTO AUDIT_CLIENTE
VALUES(GETDATE(),@CODC,@NOMC,@DIR,@TLF,SYSTEM_USER,'ANTIGUO')
--- DATOS NUEVOS
SELECT @CODC=CODCLI, @NOMC=NOMCLI, @DIR=DIREC, @TLF=TELEF FROM INSERTED
INSERT INTO AUDIT_CLIENTE
VALUES(GETDATE(),@CODC,@NOMC,@DIR,@TLF,SYSTEM_USER,'NUEVO')
END
GO

--- PROBAR TRIGGER


UPDATE CLIENTES SET NOMCLI='CARLOS LEE', DIREC='JR. SUPE 293',TELEF='997222' WHERE
CODCLI='C005';

SELECT * FROM CLIENTES


SELECT * FROM AUDIT_CLIENTE
/*3.- CREAR UN TRIGGER QUE NO PERMITA ELIMINAR ELIMINAR EL NOMBRE Y EL SUELDO DE UNA
PERSONAL.*/

create TRIGGER ELIMINAPERSONAL


ON PERSONAL
FOR DELETE
AS
DECLARE @COD CHAR(4), @NOM VARCHAR(40), @SUE DECIMAL(7,2)
SELECT @COD=CODPER, @NOM=NOMPER, @SUE=SUELDO FROM deleted
BEGIN
ROLLBACK
PRINT 'NO SE PUEDE ELIMINAR EL NOMBRE Y SUELDO DE UN PERSONAL'
END
GO

---- PROBANDO EL TRIGGER


delete from personal WHERE codper='P001'
AND (nomper='CARLOS RUIZ' or sueldo='4470.50')

delete from personal WHERE codper='P002'


and (nomper='JUAN GOMEZ' or sueldo='3470.50')
/*4.- CREAR UN TRIGGER QUE NO PERMITA MODIFICAR EL PRECIO DE LOS PRODUCTOS DE LAS
CATEGORIAS: lacteos, carnes y licores.

select comp_detalle
select categorias*/

select * FROM PRODUCTOS


select * FROM categorias

CREATE TRIGGER MODIFICA_PRECIOPRO


ON PRODUCTOS
FOR UPDATE
AS
IF(UPDATE(PRECIO))
BEGIN
DECLARE @NOM VARCHAR(30)
SET @NOM=(SELECT NOMCAT FROM CATEGORIAS
WHERE CODCAT=(SELECT CODCAT FROM INSERTED))
IF(@NOM IN('LACTEOS','CARNES','LICORES'))
BEGIN
ROLLBACK
PRINT 'NO SE PUEDE MODIFICAR LOS PRECIOS DE LOS PRODUCTOS DE LAS CATEGORIAS
LACTEOS, CARNES, LICORES'
END
END
GO

--- PROBANDO EL TRIGGER

UPDATE PRODUCTOS SET PRECIO=200 WHERE CODCAT=(SELECT CODCAT FROM CATEGORIAS


WHERE NOMCAT='LACTEOS')
GO
UPDATE PRODUCTOS SET PRECIO=200 WHERE CODCAT=(SELECT CODCAT FROM CATEGORIAS
WHERE NOMCAT='CARNES')
GO
UPDATE PRODUCTOS SET PRECIO=200 WHERE CODCAT=(SELECT CODCAT FROM CATEGORIAS
WHERE NOMCAT='LICORES')
GO
-------------------------
CREATE TRIGGER ACTUALIZASTOCK
ON COMP_DETALLE
FOR INSERT
AS
DECLARE @CODPROD CHAR(6), @NOM VARCHAR(40), @CANT INT
BEGIN
SELECT @CODPROD=CODPROD, @CANT=CANTIDAD FROM INSERTED
UPDATE PRODUCTOS SET STOCK= STOCK - @CANT WHERE CODPROD=@CODPROD AND
NOMPROD=@NOM
END
GO

Potrebbero piacerti anche