Trigger que iguala tabelas (Insert,Delete)

5 de agosto de 2011   |   by administrador

Olá Pessoal, hoje finalmente, depois de muito tempo, decidi começar a pensar em como fazer uma Trigger SQL para fazer uma Baixa automática em uma tabela de caixa.

Pra quem não sabe oque é uma Trigger, tenho uma matéria muito boa (que me ajudou), que explica muito bem como funciona ( pelo menos uma boa base), no site do Macoratti (CliqueAqui).

A situação é a seguinte, temos duas tabelas,

FINANC_PAG – onde é gerada as parcelas e mantido todo o financeiro a pagar.

FINANC_PAG_M – onde, depois que o cliente paga a parcela, é baixado a parcela e gravado nesta tabela a baixa feita, e logo após, excluida a mesma parcela da tabela de FINANC_PAG

agora temos uma tabela de CAIXA, onde esta tabela, vai receber as alterações exatas no que acontecer na tabela FINANC_PAG_M, e também será uma tabela onde irei informar as entradas e saídas de dinheiro, quando houver.

a estrutura da tabela é a seguinte:

Create Table Caixa
(
ID int identity,
DATA_MOVIMENTO NVARCHAR(8)NULL,
ID_FINANC_PAG_M INT NOT NULL
TIPO_CAIXA INT NULL,
VALOR MONEY NULL,
OBS VARCHAR(MAX) NULL,

)

temos uma trigger que vai controlar quando houver uma Baixa de Parcela, ou seja, um Insert na tabela FINANC_PAG_M.
Esta Trigger vai ser Acionada, quando haver Insert na tabela de FINANC_PAG_M

CREATE TRIGGER TRG_BAIXAPARCELA ON FINANC_PAG_M
FOR INSERT
AS
BEGIN
INSERT INTO CAIXA (DATA_MOVIMENTO, ID_FINANC_PAG_M) SELECT DT_MOVIMENTO, ID FROM INSERTED
END

E ainda temos outra Trigger para Deletar o Registro, quando a parcela é estornada, ou seja , é um disparo de Delete na tabela de FINANC_PAG_M. segue abaixo a Trigger:

ALTER TRIGGER TRG_ESTORNAPARCELA ON FINANC_PAG_M
FOR DELETE
AS
BEGIN
DELETE FROM CAIXA WHERE ID_FINANC_PAG_M IN (SELECT ID FROM DELETED)
END

ALTER TRIGGER TRG_ESTORNAPARCELA ON FINANC_PAG_M
FOR DELETE
AS
BEGIN
DELETE FROM CAIXA WHERE ID_FINANC_PAG_M IN (SELECT ID FROM DELETED)
END