none
Hatalı sorgu RRS feed

  • Soru

  • Merhaba,

    Aşağıdaki gibi bir sorgum var

      begin
      Select @varmi=count(*) from SAYIM_BILGILERI where FirmaKodu=@Firma and SubeKodu=@Sube and SayimTarih=@Tarih and Lokasyon=@Lokasyon and Barkod=@Barkod
      if @varmi<>0
      begin
      Update SAYIM_BILGILERI set Sayim2=@sayim2 where FirmaKodu=@Firma and SubeKodu=@Sube and SayimTarih=@Tarih and Lokasyon=@Lokasyon and Barkod=@Barkod
      end
      else
      begin
       Insert into SAYIM_BILGILERI (FirmaKodu,SubeKodu,Lokasyon,Barkod,Sayim1,Sayim2,SayimTarih,Lks_Baslangic)
        values(@Firma,@Sube,@Lokasyon,@Barkod,0,@Sayim2,@Tarih,@LokBaslangic)
        end

    update kısmına takılmayın orayı değiştireceğim. Asıl hatalı olan kısım update yaptığında tekrardan insert işleminede girip insert te yapması bunun nedeni ne olabilir? Ayrıca bu işlemi her zaman yapmıyor. Sorgudaki şartların fazlalığı deseniz onu yaırt edecek başka bir şey yok o şekilde kullanmam gerekiyor.

    Yardımlarınız için teşekkür ederim.

    22 Ocak 2015 Perşembe 16:47

Yanıtlar

  • IF EXISTS (SELECT *  FROM tblfirma  where id=@id
                                            UPDATE tblfirma SET  unvan=@unvan, adres=@adres,
                                             daire=@daire, vno=@vno where id=@id
                                              Else 
                                                INSERT INTO tblfirma (id,unvan,adres,daire,vno) 
                                                values (@id,@unvan,@adres,@daire,@vno)
    örnek kod paylaşıyorum kendine göre düzenlersin. işini görür.

    kdrgny@outlook.com

    • Yanıt Olarak Öneren Ekrem Önsoy 24 Ocak 2015 Cumartesi 08:50
    • Yanıt Olarak İşaretleyen Serkan Canseven 28 Ocak 2015 Çarşamba 11:09
    22 Ocak 2015 Perşembe 17:50
  • Merhaba Arzu,

    Ek bilgi olarak şunu paylaşayım seninle, böyle senaryolarda bir kaydın varlığını kontrol etmek yerine KdrGny'nin önerdiği gibi COUNT(*) ile bakmak yerine EXISTS'i tercih etmelisin. Bunun nedeni ise, Count() ile sorguladığında eğer WHERE kriterindeki alan(lar)daki veriler eşsiz değilse, kayıtların hepsi taranacaktır; fakat bir kaydın varlığını EXISTS ile sorguladığında ilk kayıt bulunur bulunmaz arama sonlandırılacaktır.


    Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3 | http://ekremonsoy.blogspot.com

    • Yanıt Olarak İşaretleyen Serkan Canseven 28 Ocak 2015 Çarşamba 11:09
    24 Ocak 2015 Cumartesi 08:55

Tüm Yanıtlar

  • IF EXISTS (SELECT *  FROM tblfirma  where id=@id
                                            UPDATE tblfirma SET  unvan=@unvan, adres=@adres,
                                             daire=@daire, vno=@vno where id=@id
                                              Else 
                                                INSERT INTO tblfirma (id,unvan,adres,daire,vno) 
                                                values (@id,@unvan,@adres,@daire,@vno)
    örnek kod paylaşıyorum kendine göre düzenlersin. işini görür.

    kdrgny@outlook.com

    • Yanıt Olarak Öneren Ekrem Önsoy 24 Ocak 2015 Cumartesi 08:50
    • Yanıt Olarak İşaretleyen Serkan Canseven 28 Ocak 2015 Çarşamba 11:09
    22 Ocak 2015 Perşembe 17:50
  • Bu işlemi niye sp ile yapma gereği duyuyorsunuz? Sp nin daha hızlını çalışacağını düşünüyorsunuz?
    22 Ocak 2015 Perşembe 19:09
  • insert komutunun üstünde if not exists kullanırsanız sorunu çözersiniz. 
    23 Ocak 2015 Cuma 14:58
  • Merhaba Arzu,

    Ek bilgi olarak şunu paylaşayım seninle, böyle senaryolarda bir kaydın varlığını kontrol etmek yerine KdrGny'nin önerdiği gibi COUNT(*) ile bakmak yerine EXISTS'i tercih etmelisin. Bunun nedeni ise, Count() ile sorguladığında eğer WHERE kriterindeki alan(lar)daki veriler eşsiz değilse, kayıtların hepsi taranacaktır; fakat bir kaydın varlığını EXISTS ile sorguladığında ilk kayıt bulunur bulunmaz arama sonlandırılacaktır.


    Ekrem Önsoy - MCDBA, MCITP:DBA+DBD, MCSD.Net, MCSE, ITILv3 | http://ekremonsoy.blogspot.com

    • Yanıt Olarak İşaretleyen Serkan Canseven 28 Ocak 2015 Çarşamba 11:09
    24 Ocak 2015 Cumartesi 08:55