Usuário com melhor resposta
Trigger nao funciona direito quando sao deletados mais de 1 linha

Pergunta
-
Ola
estou tendo o seguinte problema
criei uma trigger, porem, qdo eu executo um comando que valha para mais de uma linda ele nao funciona direito
Por exemplo
se faço uma comando desses tipo
delete TBDebitoDescricaoESaquedelete TBDebitoDescricaoESaque
where DbtDescrID in (1,2,3)
a trigger so funciona certo para a primeira linha, nas outras ela nao surte efeito
alguem sabe o porque que que isso ocorre?
T+ pessoal
Falow
CODIGO DA TRIGGERCREATE
TRIGGER TR_TBDebitoDescricaoESaqueON
TBDebitoDescricaoESaqueFOR
INSERT,UPDATE,DELETEAS
DECLARE
@DbtDescrIDNovo
INT,@DbtDescrIDVelho
INTSELECT
@DbtDescrIDNovo = DbtDescrID FROM INSERTEDSELECT
@DbtDescrIDVelho = DbtDescrID FROM DELETED--ATIVA O DEBITO ANTERIOR
UPDATE
TBDebitoDescricaoSET
DbtDescrSttID = 1WHERE
DbtDescrID = @DbtDescrIDVelho--DESATIVA O DEBITO ANTERIOR
UPDATE
TBDebitoDescricaoSET
DbtDescrSttID = 2WHERE
DbtDescrID = @DbtDescrIDNovo
Respostas
-
vc. tem que usar um update com relacionamento veja este exemplo
UPDATE TBDebitoDescricao
SET
DbtDescrSttID = 2from TBDebitoDescricao inner join deleted on deleted.chave = TBDebitoDescricao .chave
assim ele att todas as linhas do relacionamento. sempre que criar triggers esse e o procedimento correto.
Abs;
-
para update apenas em uma coluna use a funcao if update(coluna)
para saber o que esta executando vc. deve fazer uma comparacao em exists das tabelas inserted e deleted por exemplo se tiver dados nas duas e um update, mais se vc. quer controlar isso acho melhor criar uma trigger para cada acao da menos trabalho e vc. ganha em controle.
Abs;
Todas as Respostas
-
vc. tem que usar um update com relacionamento veja este exemplo
UPDATE TBDebitoDescricao
SET
DbtDescrSttID = 2from TBDebitoDescricao inner join deleted on deleted.chave = TBDebitoDescricao .chave
assim ele att todas as linhas do relacionamento. sempre que criar triggers esse e o procedimento correto.
Abs;
-
entendi marcelo
é como se fosse uma "tabela temporaria", pelo que entendi é claro
agora mais mais duvidas sobre trigger
1)tem como eu saber que "acao" esta sendo executada
por exemplo
UPDATE, DELETE, INSERT
2)executar um update apenas se ocorrer numa coluna expecifica
obrigado
T+ -
para update apenas em uma coluna use a funcao if update(coluna)
para saber o que esta executando vc. deve fazer uma comparacao em exists das tabelas inserted e deleted por exemplo se tiver dados nas duas e um update, mais se vc. quer controlar isso acho melhor criar uma trigger para cada acao da menos trabalho e vc. ganha em controle.
Abs;
-
obrigado pelas dicas
vao ser muito uteis
mais devo optar nesse caso por usar uma unica trigger, tenho muito reuso de código(nesse exemplo nao porem nas trigger de controle de caixa...), entao vou ter que ficar repetindo codigo nas trigger, e como esse sistema vai ser alterado por outras pessoas, e não vou estar por perto para ver as alterações, pode ser que se esqueçam de alterar o codigo nas outras trigger.
obrigado marcelo
T+
falow