Sql Server kullananlar veritabanları içerisinde bir çok kereler prosedür yazmıştır.
Biz az ve akıllı kod ile daha çok iş yapmaya çalışacağız, hem kodlama, hemde sonraki bakım sürecimiz hafifleyecek.
Örnek prosedürümüz.
Bu prosedürün, parametrede verilen id'ye ait personelin bilgilerini getireceği aşikar.
Eğer parametre vermezseniz prosedür çalışmayacak ve alttaki hatayı verecek.
Ancak ben bu prosedürü şimdilik iki amaç için kullanmak istiyorum :
1. Amacım :
Eğer parametrede bir ID verirsem, verdiğim id'ye ait personel bilgileri gelsin.
2. Amacım
Eğer ID vermezsem tüm personel listesi gelsin.
Bunun için prosedürümüzü revize ediyoruz.
Görüldüğü gibi coalesce adlı fonksiyonu kullandık. Coalesce yerine isnull da kullanabilirdik.
coalesce : birden fazla parametre alabilir ve gelen parametrelerden ilk not null değerini döndürür.
isnull : isnull ise sadece 2 parametre alabilir ve bu parametrelerden ilk not null değerini döndürür.
burayı inceleyecek olursak ;
Coalesce içerisine ilk önce @PersonelID değişkenini veriyoruz, sonra ise filitre yapacağımız kolon adını yazıyoruz.
Coalesce fonksiyonumuz bize ilk not null değerini döndüreceği için ;
Eğer @PersonelID değişkeninde bir değer olursa o değeri döndürecek ve ID kolonu ile onu eşleştirip
sadece o personeli filitreleyecek.
EXEC Sp_PersonelList @PersonelID = 56
Ancak @PersonelID değişkeni null değer içeriyorsa Coalesce fonksiyonumuz not null değer aradığı için bir sonraki parametreye geçecek ve o parametrede zaten filtrelediğimiz sütunun kendisi olduğu için where şartı elimine olacak ve tüm personel listesi gelecektir.
EXEC Sp_PersonelList @PersonelID = null
Sonuç : Bu basit teknikle tek prosedür ile 2 farklı resultset dönderiyoruz. Az kod çok iş.
Bu metotla aslında bir prosedür ve birçok parametre ile çok daha kompleks sorgular yazabiliriz.
Örnekler: