O Sql Server pode ter mais de uma TRIGGER em uma tabela, as TRIGGERS pode ser de INSERT, DELETE e UPDATE..
O Sql Server possui tabela de memoria chamada INSERTED e DELETED, desta forma podemos criar uma TRIGGER que mostra dados inseridos ou deletados em uma tabela.
Ex:
CREATE TRIGGER TB_TESTE_INSERT
ON TB_TESTE
FOR INSERT
AS
BEGIN
SLECT * FROM INSERTED
END
Consulta todos TRIGGERS vinculados a uma tabela.
SP_HELPTRIGGER TB_MANY_TRIGGERS
Tocar ordem de execução de TRIGGERS em uma tabela.
SP_SETTRIGGERORDER 'TR_TB_MANY_INSERT_3', 'FIRST', 'INSERT'
Triggers Encadeados
As TRIGGERS encadeados são TRIGGERS que são disparados por outros TRIGGERS, pode-se trabalhar no maximo 32 niveis de encadeamento.
INSERT TB_A - TR_TB_A - INSERT TB_B - TR_TB_B
CREATE TABLE TB_A
(
COL1 INT
)
CREATE TABLE TB_B
(
COL2 INT
)
TRIGGER diaparada da TB_A insere uma linha na tabela TB_B.
CREATE TRIGGER TR_TB_A
ON TB_A
FOR INSERT
AS
BEGIN
SELECT 'TRIGGER TABELA TB_A'
INSERT TB_B VALUES(99)
END
CONFIRMANDO EXECUCAO DOS TRIGGERS
CREATE TRIGGER TR_TB_B
ON TB_B
FOR INSERT
AS
BEGIN
SELECT 'TRIGGER TABELA TB_B'
END
Disparadando TRIGGERS.
INSERT INTO TB_A VALUES (88)
Triggers Recursivas
O numero para recursividade de TRIGGERS recursivas são 32 niveis, o emplo abaixo entra em LUP até 32 vezes em seguida é abortadocom um erro, prar resolver este problema, é so colocar uma consição de saida IF.
TB_R - TR_TB_R
CREATE TABLE TB_R
(
COL1 INT
)
INSERT INTO TB_R VALUES (1)
CREATE TRIGGER TR_TB_R
ON TB_R
FOR UPDATE
AS
BEGIN
SELECT 'RECURSIVE'
IF ....
UPDATE TB_R SET COL1 = COL1 * 1
END
Habilitando TRIGGERS recursivas no BD.
ALTER DATABASE DB_TRIGGER
SET RECURSIVE_TRIGGERS ON
Diparando TRIGGER .
UPDATE TB_R SET COL1 = 1