Está en la página 1de 20

SQL Server 2005

Triggers
SQL
Trigger – Desencadenadores- Disparadores

Los Trigger son un tipo especial de procedimientos


almacenados, los cuales se invocan de manera automática

Insertar
Eliminar
Actualizar

los trigger o desencadenadores o disparadores ayudan a


asegurar la integridad de sus datos evitando que se hagan
cambios no autorizados o inconsistentes
En forma similar, puede crear el desencadenador de
modo que si intenta eliminar un cliente de la tabla
correspondiente, verifique si hay algún pedido
todavía algún pedido anexado a ese cliente, y si lo
hay, detener el proceso de eliminación.
SQL Características de los Trigger

Los desencadenadores no tienen parámetros y no se les puede


invocar en forma explicita

No se pueden crear desencadenadores sobre vistas o tablas


temporales. sin embargo si pueden hacer referencia a vistas y
tablas temporales.

Los desencadenadores no pueden devolver al usuario


conjuntos de resultados
SQL
Formato de Trigger

CREATE TRIGGER nombreDesencadenador


ON nombreTabla
FOR {INSERT UPDATE DELETE}
AS instrucciones_sql
SQL
Palabras Claves Referenciales para Hacer con las
Tablas

Inserted
Deleted
Update
SQL
¿Cómo Obtener Información de los Triggers?

Sp_depends nombre_de_tabla
Muestra los triggers que dependen de la Tabla

Drop Trigger Nombre_de_trigger


Elimina el Trigger especificado

Sp_helpTrigger nombre_de_tabla
Trigger definidos por la tabla

Sp_helpText Nombre_de_trigger
Muestra la Sentencia que definio el trigger
SQL
Base de Datos para BDVentas
SQL
Ejemplo de Trigger de Inserción

Verificar:
Insert detabol Values ('B001','P01',5)
select * from producto
SQL
Ejemplo de Trigger de Inserción

Probar de la Siguiente Forma


SQL
Trigger de
Eliminación de
Producto
SQL
Ejemplos de Trigger
Crear la Siguiente base de Datos
create database ejemplotrigger

USE ejemplotrigger

Creación de Tabla Crédito y Cuotas


CREATE TABLE CREDITO (NCRE VARCHAR(3) PRIMARY KEY NOT NULL,
NOMCLIENE VARCHAR(10) NULL, MONTOCRE DECIMAL(8,2) NULL,NC INT
NULL,
FECHATRA DATETIME)

CREATE TABLE CUOTAS (NCRE VARCHAR(3) NULL,NUCU INT,MONTOCU


DECIMAL(8,2) NULL,
FECHAPAG DATETIME NULL, FECHACANCE DATETIME NULL,MORA
DECIMAL(8,2) NULL,TOTAL DECIMAL(8,2)NULL)

ALTER TABLE CUOTAS


ADD FOREIGN KEY(NCRE)
REFERENCES CREDITO
SQL TABLAS PARA EJEMPLO

TABLACREDITO
TABLA CREDITO

TABLA
TABLACUOTAS
CUOTAS
Trigger de Inserción de línea de Crédito de Clientes
SQL
CREATE TRIGGER IN_CREDITO
ON CREDITO
FOR INSERT
AS
DECLARE @VNCRE VARCHAR(3)
DECLARE @VNC INT
DECLARE @VMONTOCRE DECIMAL(8,2)
DECLARE @VFECHATRA DATETIME
DECLARE @MONTOCUOTA DECIMAL(8,2)
DECLARE @VNVECES INT
SELECT @VNCRE=INSERTED.NCRE FROM INSERTED
SELECT @VNC=INSERTED.NC FROM INSERTED
SELECT @VMONTOCRE=INSERTED.MONTOCRE FROM INSERTED
SELECT @VFECHATRA=INSERTED.FECHATRA FROM INSERTED
SELECT @MONTOCUOTA=@VMONTOCRE/@VNC
SELECT @VNVECES=1
WHILE @VNVECES<=@VNC
BEGIN
INSERT INTO CUOTAS (NCRE,NUCU,MONTOCU,FECHAPAG)
VALUES(@VNCRE,@VNVECES,@MONTOCUOTA,DATEADD("mm",@VNVECES,@V
FECHATRA))
SET @VNVECES=@VNVECES+1
END

---// PROBAR EL DESCENCADENADOR DE INSERCION


INSERT INTO CREDITO
VALUES('C01','ALBERTO',500,5,CONVERT(DATETIME,'01/02/2004'))
SELECT * FROM CREDITO
SELECT * FROM CUOTAS
SQL
Trigger de Eliminación

TABLA
TABLACREDITO
CREDITO
TABLA
TABLACUOTAS
CUOTAS

TABLA
TABLACREDITOCOPIA
CREDITOCOPIA
SQL
Trigger de Eliminación

Creación de la tabla CREDITOCOPIA

CREATE TABLE CREDITOCOPIA(NCRE VARCHAR(3),


NOMCLIENE VARCHAR(10) NULL, MONTOCRE DECIMAL(8,2) NULL,NC INT
NULL,
FECHATRA DATETIME)
SQL
Trigger de Eliminación de Registro de Crédito
CREATE TRIGGER ELI_CREDITO
ON CREDITO
FOR DELETE
AS
DECLARE @VNUM INT
DECLARE @VNCRE VARCHAR(3)
DECLARE @VNC INT
DECLARE @VMONTOCRE DECIMAL(8,2)
DECLARE @VFECHATRA DATETIME
DECLARE @VNOMBRECLI VARCHAR(10)
SELECT @VNUM=COUNT(NUCU) FROM CUOTAS WHERE NCRE=@VNCRE
IF @VNUM=0
BEGIN
SELECT @VNCRE=DELETED.NCRE FROM DELETED
SELECT @VNOMBRECLI=DELETED.NOMCLIENE FROM DELETED
SELECT @VNC=DELETED.NC FROM DELETED
SELECT @VMONTOCRE=DELETED.MONTOCRE FROM DELETED
SELECT @VFECHATRA=DELETED.FECHATRA FROM DELETED
INSERT INTO CREDITOCOPIA VALUES
(@VNCRE,@VNOMBRECLI,@VMONTOCRE,@VNC,@VFECHATRA)
END
ELSE
ROLLBACK
SQL
PROBAR EL TRIGGER DE ELIMINACION DE REGISTRO
DE LA TABLA CREDITO

DELETE FROM CUOTAS WHERE NCRE='C01'


DELETE FROM CREDITO WHERE NCRE='C01'

SELECT * FROM CREDITO


SELECT * FROM CUOTAS
SELECT * FROM CREDITOCOPIA
SQL
Trigger de Actualización

TABLACREDITO
TABLA CREDITO 44

11
22
TABLA
TABLACUOTAS
CUOTAS
33
44
SQL Trigger de Actualización de Registro en la Tabla Crédito en los campos
Monto de Crédito y/o numero de cuotas
CREATE TRIGGER UP_CREDITO
ON CREDITO
FOR UPDATE
AS
IF UPDATE(NC) or UPDATE(MONTOCRE)
BEGIN
DECLARE @VE_NC INT
DECLARE @VI_NC INT
DECLARE @VNCRE VARCHAR(3)
DECLARE @VMONTOCRE DECIMAL(8,2)
DECLARE @VFECHATRA DATETIME
DECLARE @MONTOCUOTA DECIMAL(8,2)
DECLARE @VNC INT
DECLARE @VNVECES INT
SELECT @VE_NC=DELETED.NC FROM DELETED
SELECT @VI_NC=INSERTED.NC FROM INSERTED
SELECT @VNCRE=INSERTED.NCRE FROM INSERTED
sELECT @VMONTOCRE=INSERTED.MONTOCRE FROM INSERTED
SELECT @VFECHATRA=INSERTED.FECHATRA FROM INSERTED
SELECT @MONTOCUOTA=@VMONTOCRE/@VI_NC
SELECT @VNVECES=1
DELETE FROM CUOTAS WHERE NCRE=@VNCRE
WHILE @VNVECES<=@VI_NC
BEGIN
INSERT INTO CUOTAS (NCRE,NUCU,MONTOCU,FECHAPAG)
VALUES(@VNCRE,@VNVECES,@MONTOCUOTA,DATEADD("mm",@VNVECES,@VFECHATRA))
SET @VNVECES=@VNVECES+1
END
END
SQL
Probando el Trigger de Actualización

UPDATE CREDITO
SET NC=3,MONTOCRE=1000
WHERE NCRE='C01'

SELECT * FROM CREDITO


SELECT * FROM CUOTAS

También podría gustarte