Desencadenadores en SQL Server

Junio 01, 2007 :: Posted by - Emilio Torrens :: Category -

Podemos escribir desencadenadores para INSERT, UPDATE, DELETE y UPDATE OF.

INSERT se dispara al insertar un nuevo registro
UPDATE se dispara al modificar un registro
DELETE se dispara al borrar un registro
UPDATE OF se dispara al modificar una columna concreta de un registro

El desencadenador puede ser para uno de los eventos o para todos a la vez.

La manera de crear un nuevo trigger en el SQL es la siguiente:

CREATE TRIGGER [MiTrigger] ON [Tabla] —Nombre del trigger y a que tabla afectara
FOR INSERT, UPDATE, DELETE  —Los eventos en los que queremos que se dispare
AS
— Aquí  ponemos el código

Para que se dispare al actualizar una columna especifica

CREATE TRIGGER [MiTrigger] ON [Tabla]
FOR UPDATE OF NombreDeColumna  — La columna que tiene que ser modificada para que el evento se dispare
AS
— Aquí  ponemos el código

Desde los triggers tenemos acceso a dos tablas virtuales del SQL con las cuales podemos saber los valores del registro que 
dispara el trigger, estas tablas son Inserted y Deleted.

Estas tablas funcionan de la siguiente manera.

INSERT: Tenemos los valores del registro en la tabla Inserted.
UPDATE: Los valores antiguos los encontramos en Deleted, los nuevos en Inserted.
DELETE: Tenemos los valores del registro en la tabla Deleted.

Para acceder a estos valores, lo podemos hacer de la siguiente manera, cambiando Inserted por Deleted según el trigger y
el valor al que queramos acceder:

DECLARE @Id int
SELECT @Id = (SELECT Id FROM Inserted)

Podemos abortar transacciones desde los triggers, para eso disponemos de RollBack Tran, usándolo podemos abortar
la transacción desde el trigger y lanzar un error al cliente con RAISE ERROR, además, igual que en los procedimientos,
la variable @@error contendrá el numero, si lo hay, del ultimo error.

IF @@error <>  0 BEGIN
RollBack Tran
RAISE  ERROR (Error ,16, 1)
END

Por último es importante saber que, al escribir el código en los desencadenadores no podemos usar las siguientes funciones:


ALTER DATABASE
CREATE DATABASE
DROP DATABASE
LOAD DATABASE
RESTORE DATABASE
DISK INIT
DISK RESIZE
LOAD LOG
RECONFIGURE LOG
RESTORE LOG