Está en la página 1de 5

1.

SINTAXIS:

CREATE TRIGGER <Nombre del Trigger>

ON <Nombre de la Tabla>

AFTER <INSERT,DELETE,UPDATE>

AS

BEGIN

SET NOCOUNT ON;

-- Esta instrucción se coloca para evitar que aparezca el conteo de numero de filas
afectadas

--Aquí se colocan las instrucciones que se requieren que se ejecute

END

2. USO de INSERTED /DELETED


Son tablas virtuales donde se puede indicar que se dispare después de un INSERT,
UPDATE o DELETE haciendo una consulta a las tablas lógicas antes mencionadas
para ver su contenido.
Si se requiere guardar de los valores antes que sufran algún cambio o si necesitamos
llevar la bitácora de cambios, esto es una excelente idea que nos puedes ser de gran
ayuda.

Debe considerarse que :

- Los triggers DML utilizan dos tablas especiales denominadas Inserted y Deleted.

- Son tablas creadas automáticamente por el SQL con la misma estructura que la tabla

sobre la cual está definido el trigger

- La tabla Inserted solo tiene datos en operaciones de Insert y Update

- La tabla Deleted sólo tiene datos en operaciones de Delete y Update

- En caso de un update las tablas Inserted y Deleted tienen data al mismo tiempo.
- No se pueden modificar los datos de estas tablas

3. DESACTIVANDO/ACTIVANDO un Trigger o Todos lo Triggers de la tabla

-- Desactiva todos los trigger de la tabla ARTICULOS

ALTER TABLE ARTICULOS DISABLE TRIGGER ALL

GO

-- Activa todos los trigger de la tabla ARTICULOS

ALTER TABLE ARTICULOS ENABLE TRIGGER ALL

4. Ejemplos de Triggers :

Ejemplo 4.1

CREATE TRIGGER nuevocliente

ON Clientes

AFTER INSERT

AS
print 'Han actualizado la tabla Clientes'
Ejemplo 4.2

Elaborar un trigger que genere un histórico de stock cada vez que se modifica la existencia de
un artículo (aquí se utilizara la tabla virtual INSERTED)

CREATE TRIGGER TR_ARTICULOS

ON ARTICULOS

AFTER UPDATE

AS

BEGIN

INSERT INTO HCO_STOCK

(IDARTICULO, STOCK, FECHA)

SELECT IDARTICULO, STOCK, getdate()

FROM INSERTED

END

--- Con este evento UPDATE se desencadena el Trigger

UPDATE ARTICULOS

SET STOCK = STOCK + 10

WHERE IDARTICULO = 1

Ejemplo 4.3

Hacer que el trigger del ejemplo 4.2 se desencadene sólo si una columna es afectada

CREATE TRIGGER TR_ARTICULOS

ON ARTICULOS

AFTER UPDATE

AS
BEGIN

-- Solo si actualiza STOCK

IF UPDATE (STOCK)

BEGIN

INSERT INTO HCO_STOCK

(IDARTICULO, STOCK, FECHA)

SELECT IDARTICULO, STOCK, getdate()

FROM INSERTED

END

END

Ejemplo 4.4

Hacer que el trigger del ejemplo 4.3 deshaga toda la operación (incluye un ROLLBACK)

CREATE TRIGGER TR_ARTICULOS

ON ARTICULOS

AFTER UPDATE

AS

BEGIN

INSERT INTO HCO_ARTICULOS

(IDARTICULO, STOCK, FECHA)

SELECT IDARTOCULO, STOCK, getdate()

FROM INSERTED

ROLLBACK

END
Ejemplo 4.5

Desactivando/Activando un trigger en particular

-- Desactiva el trigger TR_STOCK

DISABLE TRIGGER TR_STOCK ON ARTICULOS

GO

-- Activa el trigger TR_STOCK

ENABLE TRIGGER TR_STOCK ON ARTICULOS

GO

También podría gustarte