Está en la página 1de 3

Para aclarar algunos aspectos que SQL SERVER difiere de ORACLE

DATABASE en el uso de TRIGGERS:

SQL SERVER ORACLE DATABASE


Usa las tablas Usa las palabras :NEW
INSERTED y DELETED y :OLD
Usa únicamente AFTER Usa AFTER y UPDATE

1. SQL SERVER, crea dinámicamente (no sé dónde) las tablas


INSERTED y DELETED, con la finalidad de guardar los datos
nuevos en la tabla INSERTED para el caso de los comandos
INSERT y UPDATE o los datos antiguos en la tabla DELETED para
el caso de los comandos UPDATE y DELETE. La palabra
dinámicamente hace referencia por ejemplo si yo hago un
INSERT a la base de datos en una tabla de 4 campos se crea la
tabla INSERTED con cuatro campos y los valores que se
especifique en el INSERT a través de la sentencia SELECT
campo1, campo2, campo3, campo4 FROM INSERTED, los nombres de
los campos en el SELECT debe coincidir con el nombre de los
campos del comando INSERT que activo el trigger, para este
caso; igualmente pasa cuando cualquier comando UPDATE o
DELETE active un trigger, los campos que se hace referencia
en el SELECT de la tabla INSERTED o DELETED corresponden a
los campos del comando que activo el trigger.

INSERT INSERTED Se crea la tabla Dentro del


INSERTED con los TRIGGER se
mismos campos hace un
referenciados en SELECT a
el INSERT y los la tabla
valores INSERTED.
INSERTED Se crea la tabla Dentro del
INSERTED con los TRIGGER se
campos hace un
actualizados y SELECT a
los nuevos la tabla
valores INSERTED.
especificados en
el SET del
UPDATE UPDATE.
DELETED Se crea la tabla Dentro del
DELETED con los TRIGGER se
campos hace un
actualizados y SELECT a
los valores que la tabla
tenían los campos DELETED.
antes de ejecutar
el UPDATE
DELETE DELETED Se crea la tabla Dentro del
DELETED con todos TRIGGER se
los campos de la hace un
tabla y los SELECT a
valores que la tabla
tenían los campos DELETED.
antes de ejecutar
el DELETE.

Como se puede observar en la tabla anterior el UNICO comando


que al ejecutarlo usa las dos tablas (INSERTED, DELETED) es
el UPDATE. Así como ocurre en ORACLE DATABASE que cuando se
ejecutaba el UPDATE se usa :NEW y :OLD.

2. Si utiliza la instrucción ROLLBACK al final del código del


trigger se deshace tanto el trigger como el comando SQL que
activo el trigger, es decir, como si no hubiera hecho nada.
3. Si el comando INSERT, UPDATE o DELETE no afecta ninguna fila
de todas maneras el trugger se ejecuta quedando vacias las
tablas INSERTED, DELETED.
4. A continuación se encuentra un ejemplo de un trigger, probado
previamente (analizarlo respecto a la teoría explicada
anteriormente):

El objetivo del siguiente trigger se activa después (AFTER) de


hacer un UPDATE en la tabla de la base de datos llamada CUENTA (ON
CUENTA), y dentro del trigger se encarga de insertar en una tabla
de la base de datos llamada HISTORICOSALDOS cada actualización del
saldo a determinada cuenta:

CREATE TRIGGER TR_HISTORIAL_SALDOS


ON CUENTA
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO HISTORICOSALDOS(ID_CUENTA,SALDO,FECHA_SALDO)
SELECT COD_CUENTA,SAL_CUENTA,GETDATE()
FROM inserted
END
El siguiente comando (UPDATE) es el que activa el anterior trigger:

UPDATE CUENTA
SET SAL_CUENTA=SAL_CUENTA+100
WHERE COD_CUENTA=2

También podría gustarte