Uzun bir aradan sonra tekrar merhabalar,

Bugünkü yazıda Stored Procedure üzerinde kullandığımız parametrelerin değerine göre kullanımından bahsetmeye çalışacağım.

Öncelikle örneğin daha iyi anlaşılabilmesi için senaryoyu anlatayım:

Elimizde bir sorgu var ve hazırladığımız program ya da web sitesi üzerindeki checkbox seçimine göre sorguya bir şart (WHERE) eklemek isteyip istediğimize karar veriyoruz.

1. Durum : Sorguya şart ekleme ve tablo üzerindeki tüm verileri getir.

2. Durum : Sorguya checkbox üzerinde seçilmiş olan değeri şart olarak ekle ve buna göre bir tablo getir.

Böylesi bir durumda kimi zaman SP içerisinde WHERE kısmı haricindeki kısımları aynı olan ama IF ifadeleri ile birbirinden ayrılan bir kod kalabalığı içerisine gömülürüz.

Ancak bundan kurtulmanın basit yolları mevcut.

Bunlardan bir tanesi de aşağıda. Öncelikle örnekteki gibi bir SP hazırlayalım.


CREATE PROCEDURE spTEST

     @Col1 INT = 0,
     @Col2 VARCHAR(50) = NULL
AS
BEGIN

   SELECT * FROM Table1
   WHERE (((@Col1 = 0) AND (Table1.Col1 > 0)) OR (Table1.Col1 = @Col1))
             AND ((@Col2 IS NULL) OR (Table1.Col2 LIKE @Col2 + '%'))

END

Dilerseniz örnek sorguları yazmadan önce buradaki kodları açıklayalım:


(((@Col1 = 0) AND (Table1.Col1 > 0)) OR (Table1.Col1 = @Col1))

Üstteki satır @Col1 parametresi 0 değeri aldığında Col1 sütunundaki değeri sıfırdan büyük olan tüm kayıtları getirir. Eğer @Col1 parametresi 0 dışında bir değer almışsa o zaman yalnızca Col1 sütunundaki değer @Col1 parametresi ile eşit olan kayıtları getirir. SP içerisinde yaptığımız tanıma göre eğer @Col1 parametresine değer göndermezsek varsayılan değer olarak 0 alır ve sonuç olarak tüm kayıtları seçer.


((@Col2 IS NULL) OR (Table1.Col2 LIKE @Col2 + '%'))

Bu satırdaki ifade de bir önceki ile temelde aynı mantığa sahip. Ancak burada metine dayalı ifadeler üzerinde kontrol işlemi yapıyoruz.
Bu ifadeye göre eğer @Col2 parametresinin değeri NULL durumdaysa tüm kayıtları, değilse Col2 sütunu üzerindeki değerin @Col2 parametresinin değeri ile başladığı kayıtları döndürür.

 

Son olarak örnek sorgularımızı yazalım:

Bir query editor penceresi açtıktan sonra şu kodları tek tek deneyelim.


EXECUTE spTEST
-- Bütün kayıtları döndürür.


EXECUTE spTEST @Col1 = 10
-- Col1 sütunundaki değer 10 olan bütün kayıtları döndürür.


EXECUTE spTEST @Col2 = 'A'
-- Col2 sütunundaki değer A ile başlayan bütün kayıtları döndürür.


EXECUTE spTEST @Col1 = 10, @Col2 = 'A'
-- Col1 sütunundaki değer 10 olan ve Col2 sütunundaki değer A ile başlayan bütün kayıtları döndürür.

Şimdilik yazımızın sonuna geldik. İsimler birbirine benzerlik gösteriyor. İnşallah mefhûmlar birbirine girmez :)

Görüşmek üzere...

Yorumlar

Yorum Eklenmemiş...

Yorum Yaz

Adınız: *
E-Mail Adresiniz: *
Web Sitesi:
Yorum: *
Güvenlik Kodu: *
 
Tavsiye
Bağlantılar