SQL Server da ISNULL Metodu

Bu yazımda t-sql sorgularında filtreleme karmaşasını bir nebze olsun düzene sokmak için ISNULL metodundan bahsedeceğim.

Örneğin bir web uygulamamız var. Detaylı arama sayfası yaptık. Bir haylide parametremiz olacak doğal olarak.
Ama kullanıcı her parametreyi girmek zorunda değildir. Girilmeyen parametrelerde de bir koşul uygulayamayız. İşte bu durumda ISNULL metodu gülümsüyor bize.

Microsoftun eski versiyonlarındaki örnek veritabanı olan Northwind üzerinden gidelim;
Customers tablosu için şöyle bir sorgu yazalım. 2 adet değişken tanımlayıp, ülke değişkenine ‘Germany’ değerini gönderelim.

Execute ettiğimizde tüm almanya kayıtları listelenmiş oluyor.
declare @country nvarchar(20)
declare @city nvarchar(20)
set @country='Germany'
set @city=null
SELECT * FROM Customers
WHERE
Country = ISNULL(@country, Country)
and
City = ISNULL(@city, City)

Şimdi de aynı sorguya @city değişkenine ‘Berlin’ değerini gönderip bakalım;

set @country='Germany'
set @city='Berlin'

Görüldüğü gibi gönderdiğimiz parametrelere uygun kayıt geldi.(Yani Almanya/Berlindeki müşteriler)

Böylece tek bir sorguda dinamik bir filtreleme işlemi uygulamış olduk.Tabi ki ben örnekte sadece ‘=’ ile kullandım arama yapısına göre ilgili operatörlerle işlemler yapılabilir.

Kolay gelsin. 

Reklamlar

8 comments on “SQL Server da ISNULL Metodu

  1. Bir ilan sitesinde detaylı arama yapmak istiyorum. Kullanıcının girmedği parametreleri null olarak gönderdiğimde

    The parameterized query ‘(@MotorGucu nvarchar(4000),@MotorHacmi nvarchar(4000),@TasKap nv’ expects the parameter ‘@MotorGucu’, which was not supplied.

    şeklinde bir hata alıyorum. parametrenin isnullable özelliğini true yaptım ama yine düzelmedi yardımınızı bekliyorum

    • Merhaba;

      Procedure içinde @motorgucu adında var fakat siz bu SPyi çağırırken bu parametreyi göndermiyorsunuz. Uygulama kodlarınızda eksiklik var. Paylaşırsanız yardımcı olmaya çalışırım.

      Kolay gelsin.

  2. hocam bu yazım şekli doğru mudur.

    ALTER PROCEDURE [dbo].[sp_KonutAra]
    @KatID int = null,
    @TipID int = null,
    @IlID int = null,
    @IlceID int = null,
    @SemtID int = null,
    @OdaSayisi nvarchar(10) = null,
    @BulunduguKat nvarchar (20) = null,
    @IsınmaTipi nvarchar (15) = null,
    @Takas bit =null,
    @KrediyeUygun bit = null,
    @MetreKare1 int = null,
    @MetreKare2 int = null,
    @Fiyat1 decimal(12,0) = null,
    @Fiyat2 decimal(12,0) = null
    AS
    BEGIN

    Select * From Konut Where (KatID = @KatID or @KatID is null) and (TipID = @TipID or @TipID is null) and (IlceID =@IlceID or @IlceID is null)
    and (SemtID = @SemtID or @SemtID is null) and (OdaSayisi = @OdaSayisi or @OdaSayisi is null)
    and (BulunduguKat = @BulunduguKat or @BulunduguKat is null) and (IsınmaTipi = @IsınmaTipi or @IsınmaTipi is null) and (Takas = @Takas or @Takas is null)
    and (KrediyeUygun = @KrediyeUygun or @KrediyeUygun is null) and (MetreKare between ISNULL(@MetreKare1,MetreKare) and ISNULL(@MetreKare2,MetreKare))
    and (Fiyat between ISNULL(@Fiyat1,Fiyat) and ISNULL(@Fiyat2,Fiyat))

    END

    değerleri qurystring ile yollamaya çalışıyorum fakat datalist boş geliyor.kendim girdiğimde değerleri yine boş geliyor.yazım şekli ve qurystrinden null değer yollama konusunda yardımızını bekliyorum.

    • Hocam procedurelerde değişkenlere değer atama zorunluluğu yok. Select yazımıda hatalı olmuş. Birebir benim verdiğim örnek gibi yaparsanız istediğiniz sorgu boş gelmeyecektir.
      QueryStringte herhangi bir değer göndermediğinizde zaten null olarak gelmiş olacak.
      Karşıladğınız sayfada query stringleri kontrol ettirirken null olanı çekebilirsiniz.
      if(Request.QueryString[“OdaSayisi”] == null) şeklinde kontrol edebilirsiniz.

  3. hocam yardımcı olduğun için saol dediğin gibi yaptım.değişken tanımlamadan kayıtlar geldi fakat şöle bi problemim var stored prosedure hiç bi değişken istemiyor.
    örnek.datalist1.datasource=deneme.sp_Konutara(…);
    … yerlere değişken girmem lazım fakat istemiyor sebebi nedir.

  4. öncelikle örnek için teşekkürler. benim sorum şu mesela country ye birden fazla ülke yazabilir miyiz? denemeden sordum örneği görünce merak ettim. en azından buraya girenler direk cevaba da ulaşmış olur.

    iyi çalışmalar.

    • Şu durumda hayır tek bir tane yazmamız gerekiyor. Onun için sorguyu biraz genişletmek gerekiyor. Ben sadece küçük bir örnek olsun diye böyle yazdım.
      Fakat dediğin şeyde büyük bir ihtiyaç, zaman bulduğumda öyle bir sorguda eklemeye çalışırım.
      Teşekkürler.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s