Degisitirme triggerinda sorunum var

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Burhan_ast
Üye
Mesajlar: 143
Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan

Degisitirme triggerinda sorunum var

Mesaj gönderen Burhan_ast »

Merhabalar,

SQL server'da kasaya islem giriyorum islem girilince, kasa ve Cari hesap kartinda toplam degerlerini guncellemem gerekiyor, ekleme islemin sorunsuz calisiyor fakat, degistirme triggerim malesef sorunlu calisiyor,

Kod: Tümünü seç


CREATE TRIGGER FinKasaIslemleri_EkleTrig ON [dbo].[AY_001_FinKasaIslemleri]  FOR INSERT AS
DECLARE @_KayitNo  int
DECLARE @_MusteriKayitNo  int
DECLARE @_KasaKayitNo int
DECLARE @_Tarih  int
DECLARE @_RaporlamaDoviziKayitNo  int
DECLARE @_IslemDoviziKayitNo  int
DECLARE @_Odeme  Float
DECLARE @_Tahsilat Float
DECLARE @_RaporlamaDoviziTutar Float
DECLARE @_IslemDoviziTutar Float
DECLARE @_Iptal Bit
BEGIN
        -- Eklenen kayittan gerekli bilgiler, degiskenlere aliniyor...
   	select 
	@_RaporlamaDoviziKayitNo = RaporlamaDoviziKayitNo, 
	@_IslemDoviziKayitNo = IslemDoviziKayitNo, 
	@_RaporlamaDoviziTutar = RaporlamaDoviziTutari, 
	@_IslemDoviziTutar = IslemDoviziTutari, 
	@_Tahsilat = Tahsilat, 
	@_Odeme = Odeme, 
	@_Tarih = Month(Tarih), 
	@_MusteriKayitNo = MusteriKayitNo, 
	@_KasaKayitNo = KasaKayitNo, 
	@_Iptal = Iptal, 
	@_KayitNo = KayitNo 
	from inserted    

    If @_Odeme>0 
    Begin
      -- Cari hesap toplamlari duzenleniyor...
      	UPDATE AY_001_CarKartToplamlar
      	SET Odeme = Odeme + @_IslemDoviziTutar, RaporlamaDoviziOdeme = RaporlamaDoviziOdeme + @_RaporlamaDoviziTutar
      	WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (CariHesapKayitNo = @_MusteriKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
      -- Kasa toplamlari duzenleniyor...
      	UPDATE AY_001_FinKasaToplamlar
      	SET Odeme = Odeme + @_IslemDoviziTutar, RaporlamaDoviziOdeme = RaporlamaDoviziOdeme + @_RaporlamaDoviziTutar
      	WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (KasaKayitNo = @_KasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
    end else
    If @_Tahsilat>0 
    Begin
      -- Cari
      UPDATE AY_001_CarKartToplamlar
      SET Tahsilat = Tahsilat + @_IslemDoviziTutar, RaporlamaDoviziTahsilat = RaporlamaDoviziTahsilat + @_RaporlamaDoviziTutar
      WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (CariHesapKayitNo = @_MusteriKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
      -- Kasa
      UPDATE AY_001_FinKasaToplamlar
      SET Tahsilat = Tahsilat + @_IslemDoviziTutar, RaporlamaDoviziTahsilat = RaporlamaDoviziTahsilat + @_RaporlamaDoviziTutar
      WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (KasaKayitNo = @_KasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
    end
END

Bu trigger gayet guzel bir sekilde calisiyor...

Fakat asagidaki trigger dogru calismiyor...

Kod: Tümünü seç


CREATE TRIGGER FinKasaIslemleri_DegistirTrig ON [dbo].[AY_001_FinKasaIslemleri]  FOR UPDATE AS
-- Yeni eklenen kayittan alinacak bilgiler icin degisken tanimlaniyor
DECLARE @_KayitNo  int
DECLARE @_MusteriKayitNo  int
DECLARE @_KasaKayitNo int
DECLARE @_Tarih  int
DECLARE @_RaporlamaDoviziKayitNo  int
DECLARE @_IslemDoviziKayitNo  int
DECLARE @_Odeme  Float
DECLARE @_Tahsilat Float
DECLARE @_RaporlamaDoviziTutar Float
DECLARE @_IslemDoviziTutar Float
DECLARE @_Iptal Bit

-- Eski kayittan alinacak bilgiler icin degisken tanimlaniyor
DECLARE @_EskiKayitNo  int
DECLARE @_EskiMusteriKayitNo  int
DECLARE @_EskiKasaKayitNo int
DECLARE @_EskiTarih  int
DECLARE @_EskiRaporlamaDoviziKayitNo  int
DECLARE @_EskiIslemDoviziKayitNo  int
DECLARE @_EskiOdeme  Float
DECLARE @_EskiTahsilat Float
DECLARE @_EskiRaporlamaDoviziTutar Float
DECLARE @_EskiIslemDoviziTutar Float
DECLARE @_EskiIptal Bit

BEGIN
   	-- Degistirilen kayittan bilgiler degiskenlere aliniyor...
   	select 
		@_RaporlamaDoviziKayitNo = RaporlamaDoviziKayitNo, 
		@_IslemDoviziKayitNo = IslemDoviziKayitNo, 
		@_RaporlamaDoviziTutar = RaporlamaDoviziTutari, 
		@_IslemDoviziTutar = IslemDoviziTutari, 
		@_Tahsilat = Tahsilat, 
		@_Odeme = Odeme, 
		@_Tarih = Month(Tarih), 
		@_MusteriKayitNo = MusteriKayitNo, 
		@_KasaKayitNo = KasaKayitNo,
		@_Iptal = Iptal,  
		@_KayitNo = KayitNo 
	from Inserted

   	-- Degistirilen kayit henuz post edilmedigi icin eski bilgiler degiskenlere aliniyor...
	select 
		@_EskiRaporlamaDoviziKayitNo = RaporlamaDoviziKayitNo, 
		@_EskiIslemDoviziKayitNo = IslemDoviziKayitNo, 
		@_EskiRaporlamaDoviziTutar = RaporlamaDoviziTutari, 
		@_EskiIslemDoviziTutar = IslemDoviziTutari, 
		@_EskiTahsilat = Tahsilat, 
		@_EskiOdeme = Odeme, 
		@_EskiTarih = Month(Tarih), 
		@_EskiMusteriKayitNo = MusteriKayitNo, 
		@_EskiKasaKayitNo = KasaKayitNo,
		@_EskiIptal = Iptal,  
		@_EskiKayitNo = KayitNo 
	from AY_001_FinKasaIslemleri
	-- @_KayitNo, degistirilen kayittan alindi
	Where KayitNo = @_KayitNo
  
  -- Eger IPTAL alani 1 olmus ise kayit silinmis demektir, ve toplamlar - yapilmasi lazim
  If (@_EskiIptal = 0) and (@_Iptal = 1)
  Begin
    If @_EskiOdeme>0 
    Begin
      -- Cari toplamlari duzenleniyor   
      	UPDATE AY_001_CarKartToplamlar
      	SET Odeme = Odeme - @_EskiIslemDoviziTutar, RaporlamaDoviziOdeme = RaporlamaDoviziOdeme - @_EskiRaporlamaDoviziTutar
      	WHERE (IslemDovizi = @_EskiIslemDoviziKayitNo) and (CariHesapKayitNo = @_EskiMusteriKayitNo) and (DonemKayitNo = 1) and (Ay = @_EskiTarih)
      -- Kasa toplamlari duzenleniyor
      	UPDATE AY_001_FinKasaToplamlar
      	SET Odeme = Odeme - @_EskiIslemDoviziTutar, RaporlamaDoviziOdeme = RaporlamaDoviziOdeme - @_EskiRaporlamaDoviziTutar
      	WHERE (IslemDovizi = @_EskiIslemDoviziKayitNo) and (KasaKayitNo = @_EskiKasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_EskiTarih)
    end else
    If @_EskiTahsilat>0 
    Begin
      -- Cari toplamlari duzenleniyor
      	UPDATE AY_001_CarKartToplamlar
      	SET Tahsilat = Tahsilat - @_EskiIslemDoviziTutar, RaporlamaDoviziTahsilat = RaporlamaDoviziTahsilat - @_EskiRaporlamaDoviziTutar
      	WHERE (IslemDovizi = @_EskiIslemDoviziKayitNo) and (CariHesapKayitNo = @_EskiMusteriKayitNo) and (DonemKayitNo = 1) and (Ay = @_EskiTarih)
      -- Kasa toplamlari duzenleniyor
      	UPDATE AY_001_FinKasaToplamlar
      	SET Tahsilat = Tahsilat - @_EskiIslemDoviziTutar, RaporlamaDoviziTahsilat = RaporlamaDoviziTahsilat - @_EskiRaporlamaDoviziTutar
      	WHERE (IslemDovizi = @_EskiIslemDoviziKayitNo) and (KasaKayitNo = @_EskiKasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_EskiTarih)
    end 
  End else
  -- Kayit Iptali geriye alinmis bu nedenle islem + yapiliyor...
  If (@_EskiIptal = 1) and (@_Iptal = 0)
  Begin
    If @_Odeme>0 
    Begin
      -- Cari toplamlari duzenleniyor...
      	UPDATE AY_001_CarKartToplamlar
      	SET Odeme = Odeme + @_IslemDoviziTutar, RaporlamaDoviziOdeme = RaporlamaDoviziOdeme + @_RaporlamaDoviziTutar
      	WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (CariHesapKayitNo = @_MusteriKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
      -- Kasa toplamlari duzenleniyor...
      	UPDATE AY_001_FinKasaToplamlar
      	SET Odeme = Odeme + @_IslemDoviziTutar, RaporlamaDoviziOdeme = RaporlamaDoviziOdeme + @_RaporlamaDoviziTutar
      	WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (KasaKayitNo = @_KasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
    end else
    If @_Tahsilat>0 
    Begin
      -- Cari
      UPDATE AY_001_CarKartToplamlar

      SET Tahsilat = Tahsilat + @_IslemDoviziTutar, RaporlamaDoviziTahsilat = RaporlamaDoviziTahsilat + @_RaporlamaDoviziTutar
      WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (CariHesapKayitNo = @_MusteriKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
      -- Kasa
      UPDATE AY_001_FinKasaToplamlar
      SET Tahsilat = Tahsilat + @_IslemDoviziTutar, RaporlamaDoviziTahsilat = RaporlamaDoviziTahsilat + @_RaporlamaDoviziTutar
      WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (KasaKayitNo = @_KasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
    end 
  End else
  -- Kayit toplam tutarlari degistirilmis, bu nedenle toplam rakamlari duzenlenmesi lazim 
  If (@_EskiIptal = 0) and (@_Iptal = 0)
  Begin
    -- Oncelikle eski toplam rakamlari - yapiliyor...  
    If @_EskiOdeme>0 
    Begin
      -- Cari toplamlari duzenleniyor...   
      UPDATE AY_001_CarKartToplamlar
      SET Odeme = Odeme - @_EskiIslemDoviziTutar, RaporlamaDoviziOdeme = RaporlamaDoviziOdeme - @_EskiRaporlamaDoviziTutar
      WHERE (IslemDovizi = @_EskiIslemDoviziKayitNo) and (CariHesapKayitNo = @_EskiMusteriKayitNo) and (DonemKayitNo = 1) and (Ay = @_EskiTarih)
      -- Kasa toplamlari duzenleniyor... 
      UPDATE AY_001_FinKasaToplamlar
      SET Odeme = Odeme - @_EskiIslemDoviziTutar, RaporlamaDoviziOdeme = RaporlamaDoviziOdeme - @_EskiRaporlamaDoviziTutar
      WHERE (IslemDovizi = @_EskiIslemDoviziKayitNo) and (KasaKayitNo = @_KasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_EskiTarih)
    end else
    If @_EskiTahsilat>0 
    Begin
      -- Cari toplamlari duzenleniyor...
      UPDATE AY_001_CarKartToplamlar
      SET Tahsilat = Tahsilat - @_EskiIslemDoviziTutar, RaporlamaDoviziTahsilat = RaporlamaDoviziTahsilat - @_EskiRaporlamaDoviziTutar
      WHERE (IslemDovizi = @_EskiIslemDoviziKayitNo) and (CariHesapKayitNo = @_EskiMusteriKayitNo) and (DonemKayitNo = 1) and (Ay = @_EskiTarih)
      -- Kasa toplamlari duzenleniyor...
      UPDATE AY_001_FinKasaToplamlar
      SET Tahsilat = Tahsilat - @_EskiIslemDoviziTutar, RaporlamaDoviziTahsilat = RaporlamaDoviziTahsilat - @_EskiRaporlamaDoviziTutar
      WHERE (IslemDovizi = @_EskiIslemDoviziKayitNo) and (KasaKayitNo = @_KasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_EskiTarih)
    end 
    
    -- Eski toplam rakamlari - yapildi simdi, yeni rakamlar + yapiliyor...
  
    If @_Odeme>0 
    Begin
      -- Cari toplamlari duzenleniyor...
      UPDATE AY_001_CarKartToplamlar
      SET Odeme = Odeme + @_IslemDoviziTutar, RaporlamaDoviziOdeme = RaporlamaDoviziOdeme + @_RaporlamaDoviziTutar
      WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (CariHesapKayitNo = @_MusteriKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
      -- Kasa toplamlari duzenleniyor...
      UPDATE AY_001_FinKasaToplamlar
      SET Odeme = Odeme + @_IslemDoviziTutar, RaporlamaDoviziOdeme = RaporlamaDoviziOdeme + @_RaporlamaDoviziTutar
      WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (KasaKayitNo = @_KasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
    end else
    If @_Tahsilat>0 
    Begin
      -- Cari toplamlari duzenleniyor...
      UPDATE AY_001_CarKartToplamlar
      SET Tahsilat = Tahsilat + @_IslemDoviziTutar, RaporlamaDoviziTahsilat = RaporlamaDoviziTahsilat + @_RaporlamaDoviziTutar
      WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (CariHesapKayitNo = @_MusteriKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
      -- Kasa toplamlari duzenleniyor...
      UPDATE AY_001_FinKasaToplamlar
      SET Tahsilat = Tahsilat + @_IslemDoviziTutar, RaporlamaDoviziTahsilat = RaporlamaDoviziTahsilat + @_RaporlamaDoviziTutar
      WHERE (IslemDovizi = @_IslemDoviziKayitNo) and (KasaKayitNo = @_KasaKayitNo) and (DonemKayitNo = 1) and (Ay = @_Tarih)
    end 
  end
END


Saygilar,
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Eski kayıtları alırken tablo ismi yerine DELETED kullanmayı dene.
Cevapla