domingo, 6 de novembro de 2011

Triggers



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