none
koşullu trigger işlemi

    Genel Tartışma

  • Merhaba,

    satislar adına bir tablom var

    Kullanici ve Tutar diye iki tane kolonum  var.

    müşterilerin her alişverişinde satılan Kullanici adı ile birlikte satış miktarı bu tabloya kaydediliyor.

    kullanıcıların yaptıkları en yüksek alışveriş miktarını ayrı bir tabloda tutarak rapor oluşturmak istiyorum.

    satislar tablosunda yapılan her insert işleminden sonra trigger ile max_satislar adında bir tablosya  kullanici adi ve max(tutar)  bilgilerini eklemek istiyorum.

    ayrıca bu işlemleri yaparken bazı koşulllar çerçevesinde yapmak gerekiyor. ÖRN: max_satislar tablosunda kullanici adi  zaten varsa ve Max(tutar) eski değerden fazlaysa UPDATE etmeli  küçük ve eşit ise  işlem yapmamalı.

    eğer kullanici adi yoksa  insert ile yeni satir eklemeli.

    konuyla ilgili yardım rica ediyorum.

    27 Mayıs 2012 Pazar 16:04

Tüm Yanıtlar

  • Öncelikle bu işlem için trigger ve ayrı tablo kullanmaya gerek yok gibi. Yani rapor istenildiğinde asıl tablodan bu bilgileri toparlayan bir view dan bilgiler alınabilir.

    Ama illede trigger derseniz, dediğiniz gibi insert triggerinde, bir değişken tanımlanır, kullanıcı adınınn countu alınarak değişkene atanıtr. Değişkenin sıfırdan büyük olup olmamasına bakılarak insert yada update yapılır.


    Mustafa Torun

    27 Mayıs 2012 Pazar 18:39
  • Öncelikle bu işlem için trigger ve ayrı tablo kullanmaya gerek yok gibi. Yani rapor istenildiğinde asıl tablodan bu bilgileri toparlayan bir view dan bilgiler alınabilir.

    Ama illede trigger derseniz, dediğiniz gibi insert triggerinde, bir değişken tanımlanır, kullanıcı adınınn countu alınarak değişkene atanıtr. Değişkenin sıfırdan büyük olup olmamasına bakılarak insert yada update yapılır.


    Mustafa Torun

    Mustafa Bey, öncelikle ilginize teşekkürler.

    Konuyu trigger ile çözmek istiyorum.  sabahtan beri makine başında olmama rağmen istediğimi tam elde edemedim. bahsettiğiniz gibi değişkenlere atayarak trigger yazma konusunda bir örnek yada link paylaşmanız mümkün müdür?

    iyi akşamlar.

    27 Mayıs 2012 Pazar 18:46
  • işte örnek sql kodu
    ALTER TRIGGER [D00008].[trgAsnFormAlisFaturaSifirla]
    ON [D00008].[STOK_HAREKETLERI_B]
    FOR DELETE
    AS 
    	DECLARE @BASLIK_ID int
    	SELECT @BASLIK_ID = BASLIK_ID FROM DELETED
    
    	update AksaServisNet.Apc.ServisBaslik set ErpAktarildiMi1 = 0, ErpAktarimNo1 = Null
    	where ErpAktarimNo1 = @BASLIK_ID
    
    GO
    Sizin yapmanız gereken arada bir IF ELSE END bloğu yazmak. Bir de bu örnek birebir değil dikkat. Bu bir delete triggerı.

    Mustafa Torun

    27 Mayıs 2012 Pazar 19:09
  • Merhaba,

    Mustafa Bey'in yardımı işnizi gördümü? Geri dönüş almamız mümkün müdür?

    Teşekkürler


    Microsoft bu servisi kullanıcılarına yardım etme, Microsoft ürünleri ve teknolojileriyle ilgili bilgi bankasını genişletme amacıyla ücretsiz sunmaktadır.
    Bu içerik olduğu gibi benim tarafımdan hazırlanmış olup Microsoft tarafından herhangi gibi bir sorumluluk üstlenildiği anlamına gelmez.
    Facebook Üzerinden Takip Et!
    Twitter'da Takip Et!

    12 Haziran 2012 Salı 06:36
  • Levent Bey,

    kaynak tablolara ait şemanın aşağıdaki gibi olduğunu düşünelim.

    CREATE TABLE [dbo].[tbSatislar](
    	[SatirId] [int] IDENTITY(1,1) NOT NULL,
    	[Kullanici] [int] NULL,
    	[AlisverisTutar] [int] NULL
    ) 
    GO
    CREATE TABLE [dbo].[tbMaxSatislar](
    	[Kullanici] [int] NULL,
    	[Tutar] [int] NULL
    )

    Trigger kodu da aşağıdaki gibi olacaktır. Anlaşılmayan bir durum olursa geri dönüş yaparsan yardımcı olmaya çalışırım.

    CREATE TRIGGER trKullaniciSatisAktar
       ON tbSatislar
       AFTER INSERT
    AS 
    BEGIN
    	--Geçici bir tablo oluşturalım
    	DECLARE @tb AS Table (Kullanici int, MaxTutar int)
    	
    	--Kaydi girilmis kullanici veya kullanicilarin en yuksek satislarini bulalim
    	INSERT @tb
    	SELECT b.Kullanici,MAX(b.AlisverisTutar)  MaxTutar
    		FROM inserted a INNER JOIN tbSatislar b ON a.Kullanici=b.Kullanici
    	GROUP BY b.Kullanici
    	
    	--max_satislar tablosunda kullanici adi  zaten varsa ve Max(tutar) eski değerden fazlaysa UPDATE etmeli
    	--Çıkan sonucu tbMaxSatislar ile JOIN edelim
    	UPDATE a SET Tutar=b.MaxTutar
    	FROM tbMaxSatislar a RIGHT JOIN @tb b ON a.Kullanici=b.Kullanici
    	WHERE b.MaxTutar>ISNULL(a.Tutar,0)
    	
    	--kullanici adi yoksa  insert ile yeni satir eklemeli.
    	INSERT tbMaxSatislar
    	SELECT a.Kullanici,a.MaxTutar FROM @tb a 
    		LEFT JOIN tbMaxSatislar b ON a.Kullanici=b.Kullanici
    	WHERE b.Kullanici IS NULL
    END


    Ahmet Kaymaz
    http://www.ahmetkaymaz.com
    C# VB.NET ASP.NET kitabı

    12 Haziran 2012 Salı 12:36