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...