Aslında senin olayının ana teması gerekli sorguyu üretmek. Trigger ya da procedure kavramları sadece çalışma sırasında devreye girer. İçerik ise kodlama ile doldurulur
pasa_yasar yazdı:...carilerin geçtiği bütün kayıtları fatura,borç dekontu,alacak dekontu vb. bütün bilgileri toplayıp carinin bakiyesine yazacak...
Bu mantığa göre düzenlenen bilgide, silineni çıkarıp ekleneni toplamak yeter.
Kod: Tümünü seç
CREATE TRIGGER [cariguncelle] ON [dbo].[carihareket]
FOR INSERT, UPDATE, DELETE
AS
--silinen ve eklenen değerler
declare @sil_bakiye money, @ek_bakiye money
declare @sil_borc money, @ek_borc money
declare @sil_alacak money, @ek_alacak money
declare @sil_cid int, @ek_cid int
set nocount on
select @ek_cid=ID,@ek_borc=isNull(borc,0),@ek_alacak=isNull(alacak,0) from INSERTED
--eklenen kaydın değerleri
select @sil_cid=ID,@sil_borc=isNull(borc,0),@sil_alacak=isNull(alacak,0) from DELETED
--silinen kaydın değerleri
update cari set borc=borc-@sil_borc, alacak=alacak-@sil_alacak,bakiye=bakiye-(@sil_borc-@sil_alacak) where ID=@sil_cid
--silinen değerleri o cariden (@sil_cid) çıkar
update cari set borc=borc-@ek_borc, alacak=alacak-@ek_alacak,bakiye=bakiye+(@ek_borc-@ek_alacak) where ID=@ek_cid
--eklenen değerleri o cariye (@ek_cid) ekle
set nocount off
Not:Bir kayıt değeri değiştirişdiğinde, eski değer siliniyor gibi (from DELETED), yeni değer de ekleniyormuş (from INSERTED) çalıştığından kayıt değişikliklerinde her iki tablodan da değer okunmaktadır. Bu kodları biraz incelersen işin mantığının çok zor olmadığını anlarsın. Kolay gelsin.