none
Sql server aynı kayıtlı verilerin toplama işlemi RRS feed

  • Soru

  • Merhaba,

    sql tabloma aynı kayıtlı verilerin girilmesini engellemek istiyorum. Eğer aynı kayıt girilmeye çalışırsa

    örneğin;

    sql tablomda

    Ürün:Traş makinesi

    Adet:12

    olarak bulunmaktadır. Tekrar aynı şekilde Ürün: traş makinesi adet:10 olarak kayıt girmeye çalıştığımda tablonun son hali

    Ürün:Traş makinesi

    Adet:22 olarak görünmesini istiyorum. Yardımcı olabilir misiniz ?

    5 Ağustos 2019 Pazartesi 05:00

Tüm Yanıtlar

  • Merhaba,

    Sql tarafında bu işlemi bir trigger kullanarak yapabilirsiniz.

    Eklenen kaydın aynısı varsa istediğiniz kriterlere bağlı olarak, insert yapıldığı anda update sorugusunu çalıştırın.

    Daha sonrasında son eklenen kaydı silin.

    Takıldığınız bir konu olursa tekrar yardımcı olabilirim.

    İyi çalışmalar.

    Not: Yorumu yararlı bulduysanız oy vermeyi unutmayınız.

    • Yanıt Olarak Öneren mehmet bastem 5 Ağustos 2019 Pazartesi 08:04
    5 Ağustos 2019 Pazartesi 05:42
  • Ben bu durumda klasik olarak önce varsa eski kaydı siliyorum. Sonra yeni kaydı ekliyorum.  Kolay Gelsin

    mehmet bastem

    5 Ağustos 2019 Pazartesi 08:04
  • Entity Framework.

    Insert : 

    using(MyDbContext db = new MyDbContext() ){
    
     db.Urunler.Add(new Urun(){Adet=1,Urun="Traş makinesi"});
     db.SaveChanges(); //transaction commit
    
    }

    Read :

    using(MyDbContext db = new MyDbContext()){
    
    var sorgusonuc = db.Urunler.Where(x=>x.Urun=="Tras Makinesi").ToList(); 
    
    }

    Update : 

    using(MyDbContext db = new MyDbContext()){
    
     var result = db.Urunler.SingleOrDefault(b => b.Urun== "Tras M.");
        if (result != null)
        {
            result.Aciklama= "Yeni Deger";
            db.SaveChanges();//transaction commit
        }
    
    
    }

    Delete : 

    using(MyDbContext db = new MyDbContext()){
    
    var Urunum= new Urun { Id = 1 };
    db.Urunler.Attach(Urunum);
    db.Urunler.Remove(Urunum);
    db.SaveChanges();//transaction commit
    
    }





    5 Ağustos 2019 Pazartesi 08:36
  • CREATE PROCEDURE UrunEkle
    @UrunAdi VARCHAR(50),
    @Adet INT 
    AS
    BEGIN
    SET NOCOUNT ON;
    
    IF NOT EXISTS(SELECT UrunAdi FROM Stoklar WHERE UrunAdi = @UrunAdi)
        INSERT INTO Tablo
        SELECT.....
    
    ELSE
        UPDATE Tablo SET Adet = Adet + @adet WHERE UrunAdi = @UrunAdi
    
    END
    
    Bu şekilde SP ile yapabilirsiniz. Fakat Business Logic olarak stokların giriş tarihleri ve ilerleyen zamanlar için girilen tarihde ki fiyatları önemli olacağından. Tarih bazlı transaction tutmak daha iyi. Veriyi çektiğin anda GROUP By ile adet toplamını alabilirsiniz. Fiyatlar için de ortalama fiyat yada düşülecek kalemin fiyatından maliyetler hesaplanabilir.
    26 Eylül 2019 Perşembe 06:15
  • INSTEAD OF trigger daha efektif olur diye düşünüyorum.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    26 Eylül 2019 Perşembe 14:44