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