Forum

SQL Trigger Kod A&#...
 
Bildirimler
Hepsini Temizle

SQL Trigger Kod Açıklaması

6 Yazılar
2 Üyeler
0 Likes
723 Görüntüleme
(@SeFaKARA)
Gönderiler: 10
Active Member
Konu başlatıcı
 
 S.A Çözüm Park ailesi; Aşağıdaki sql kodlarını bana açıklaya bilirmisiniz.  
CREATE TRIGGER TaksitliSatislarOdemePlani ON [TaksitliSatislar]
    AFTER INSERT
AS
    DECLARE @miktar MONEY ,
        @baslangic DATETIME ,
        @taksit INTEGER ,
        @odeme INTEGER ,
        @bekletme INTEGER ,
        @satisId INTEGER;

    SELECT  @satisId = [SatisId] ,
            @baslangic = [Tarih] ,
            @miktar = [Tutar] ,
            @taksit = [Taksit] ,
            @bekletme = [BekletmeSuresi]
    FROM    [inserted] AS ts
            INNER JOIN [Bankalar] AS b ON [ts].[BankaId] = [b].[BankaId];

    DECLARE @taksitler TABLE
        (
          taksitNo INT ,
          tarih DATETIME ,
          tutar MONEY
        )

    SET @odeme = 1
    WHILE @odeme <= @taksit 
        BEGIN
            INSERT  [Odemeler]
                    ( [SatisId] , [OdemeNo] , [Tarih] , [Tutar] )
            VALUES  ( @satisId , @odeme ,
                      DATEADD(DAY, ( @odeme - 1 ) * @bekletme, @baslangic) ,
                      @miktar / @taksit
                    )
            SET @odeme = @odeme + 1
        END
 
Gönderildi : 03/10/2013 13:51

(@caglarozenc)
Gönderiler: 247
Reputable Member
 

Merhaba, 

TaksitliSatislar tablosuna gerçekleştirilen bir insert işlemi sonrasında ; 
Insert edilen kayıtlar ile Bankalar tablosu birleştirilmiş ve tanımlanan değişkenlere insert edilen değerlerin atanması sağlanmış. 
Daha sonrasında da Odemeler isimli tabloya taksit sayısı kontrol edilerek insert işlemi gerçekleştirilmiş. 
Basit bir OdemePlani oluşturulmuş. Insert sırasında DATEADD kullanılmış. 
 
 
Anlamadığınız yerden bahsederseniz, daha da iyi yardımcı olabilirim. 
 
Gönderildi : 03/10/2013 14:26

(@SeFaKARA)
Gönderiler: 10
Active Member
Konu başlatıcı
 

Merhaba Çağlar bey,

 Evet doğru ödeme planı yapmaya çalışıyorum.

 Ben herhangi bir taksitli satış eklediğimde bunu trigger alıyor ödemeler listesine sonra taksit sayısına bölüyor ve çekim tarihine göre bankaların bekletme süresini ekleyerek tek tek satır satır yazıyor.

 Ama burda şu şekilde bi yalnışlık var.

 İlk satırı çekim tarihini yazıyor doğru olan çekimtarihi+bekletme süresi olcak.

 diğer taksitlerde yine aynı şekilde kendinden bir önceki taksitin tarihne bekleme süresini ekleyerek devam edecek. 

 

 VALUES  ( @satisId , @odeme ,DATEADD(DAY, ( @odeme - 1 ) * @bekletme, @baslangic) @miktar / @taksit )
 Burda değerleri diğer tabloya atama işleminde neresinde yalnışlık var.

 

 
Gönderildi : 03/10/2013 14:54

(@SeFaKARA)
Gönderiler: 10
Active Member
Konu başlatıcı
 

 

Tablomun en son hali budur.

ve yukarıda ki triggerler olduğu gibi vardır.

CREATE TABLE TaksitliSatislar (SatisId INT IDENTITY PRIMARY KEY, Tarih DATETIME, Tutar MONEY, Taksit TINYINT, BankaId int);

CREATE TABLE Odenenler (SatisId INT  PRIMARY KEY, Tarih DATETIME, Tutar MONEY, Taksit TINYINT, BankaId int);
CREATE TABLE
Bankalar (BankaId int IDENTITY PRIMARY KEY, BankaAdi VARCHAR(50), BekletmeSuresi tinyint,Komisyon Money,KatkiPayi Money);
CREATE TABLE
Odemeler (OdemeId INT IDENTITY PRIMARY KEY, SatisId INT, OdemeNo TINYINT, Tarih DATETIME, Tutar MONEY);

CREATE TABLE iadeler (iadeId INT IDENTITY PRIMARY KEY, SatisId INT, OdenenNo TINYINT, Tarih DATETIME, Tutar MONEY);

Eğer bir Çekim işlemi İade edilecekse.
Odenenler kısmına işleniyor oda şu şekilde;
TaksitliSatislar.SatisId sini alıp Odenenler.SatisId sinin yerine koyuyor. sonra iptal tarihini tutarını taksit sayısını BankaId   PosAdi nı yazıyor yine Taksitli satışlarda olduğu gibi Trigger çalışıyor bunları ordaki gibi teker teker yazıyor.İadeler Tablosuna.

Şöyle bir şey TaksitliSatislara eklenen bir veri, İader edildiyse onun SatisId si Odenenlerde var.

ben şöyle bir select sorgusu işitiyorum.
ben bankalara göre ödeme listesi görüntülemek istediğimde.
bana eğer çekim iptal ediyse o çekimin iade kısmında görünsün.
BankaAdi    Taksit    Çekim   İade
X Bank         1          50        50
X Bank         2          50        50
Y Bank         1          50          0
Y Bank         2          50          0

bu şekilde bir sonuç dönmesi için sorgumu nasıl yazmam gerekir.
Biliyorum biraz karışık, belki bana öyle,
Umarım anlatmak istediğimi İfade edebilmişimdir.
Yardımlarınız için Şimdiden Tşkrler.

 
Gönderildi : 26/10/2013 02:27

(@SeFaKARA)
Gönderiler: 10
Active Member
Konu başlatıcı
 

 

Tablomun en son hali budur.

ve yukarıda ki triggerler olduğu gibi vardır.

CREATE TABLE TaksitliSatislar (SatisId INT IDENTITY PRIMARY KEY, Tarih DATETIME, Tutar MONEY, Taksit TINYINT, BankaId int);

CREATE TABLE Odenenler (SatisId INT  PRIMARY KEY, Tarih DATETIME, Tutar MONEY, Taksit TINYINT, BankaId int);
CREATE TABLE
Bankalar (BankaId int IDENTITY PRIMARY KEY, BankaAdi VARCHAR(50), BekletmeSuresi tinyint,Komisyon Money,KatkiPayi Money);
CREATE TABLE
Odemeler (OdemeId INT IDENTITY PRIMARY KEY, SatisId INT, OdemeNo TINYINT, Tarih DATETIME, Tutar MONEY);

CREATE TABLE iadeler (iadeId INT IDENTITY PRIMARY KEY, SatisId INT, OdenenNo TINYINT, Tarih DATETIME, Tutar MONEY);

Eğer bir Çekim işlemi İade edilecekse.
Odenenler kısmına işleniyor oda şu şekilde;
TaksitliSatislar.SatisId sini alıp Odenenler.SatisId sinin yerine koyuyor. sonra iptal tarihini tutarını taksit sayısını BankaId   PosAdi nı yazıyor yine Taksitli satışlarda olduğu gibi Trigger çalışıyor bunları ordaki gibi teker teker yazıyor.İadeler Tablosuna.

Şöyle bir şey TaksitliSatislara eklenen bir veri, İader edildiyse onun SatisId si Odenenlerde var.

ben şöyle bir select sorgusu işitiyorum.
ben bankalara göre ödeme listesi görüntülemek istediğimde.
bana eğer çekim iptal ediyse o çekimin iade kısmında görünsün.
BankaAdi    Taksit    Çekim   İade
X Bank         1          50        50
X Bank         2          50        50
Y Bank         1          50          0
Y Bank         2          50          0

bu şekilde bir sonuç dönmesi için sorgumu nasıl yazmam gerekir.
Biliyorum biraz karışık, belki bana öyle,
Umarım anlatmak istediğimi İfade edebilmişimdir.
Yardımlarınız için Şimdiden Tşkrler.

 
Gönderildi : 26/10/2013 02:28

(@SeFaKARA)
Gönderiler: 10
Active Member
Konu başlatıcı
 

database i aşağıdaki link ten indirebilirsiniz

 

İNDİR

1 kasım son gün indirmek için

 
Gönderildi : 26/10/2013 02:34

Paylaş: