create trigger
[dbo].[ControleFaturasUnificadas_Recebimentos_DeletaMovContábil_Receb]
on [dbo].[ControleFaturasUnificadas_Recebimentos]
for delete
as
declare @CodCompleto nvarchar(20)
select @CodCompleto = CódigoCompleto
from deleted
delete MovimentoContábil
where CódigoFaturaUnificada_Recebimento = @CodCompleto
Tudo certo, né?
Na verdade, tudo errado, porque se você deletar vários registros da tabela ControleFaturasUnificadas_Recebimentos ao mesmo tempo, só o último registro deletado da tabela primária provocará a exclusão do registro correspondente na tabela secundária. Ou seja, inúmeros registros que deveriam ser deletados continuarão no banco de dados.
A solução é fazer um JOIN entre a tabela primária (tabela Deleted, uma tabela virtual dos registros deletados) com a tabela secundária. Veja o mesmo exemplo remodelado:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER trigger
[dbo].[ControleFaturasUnificadas_Recebimentos_DeletaMovContábil_Receb]
on [dbo].[ControleFaturasUnificadas_Recebimentos]
for delete
as
delete MovimentoContábil
from MovimentoContábil, Deleted
where CódigoFaturaUnificada_Recebimento = Deleted.CódigoCompleto
Agora o negócio funciona!
Nenhum comentário:
Postar um comentário