Dışarıdan parametre alan bir Stored Procedure içerisinde parametreye göre bazen sadece o değere eşit olan kaydı bazen de tüm kayıtları getirmesini isteyebiliriz. Bu tür durumlarda tablodan seçim yapmadan önce parametrenin boş ve dolu olduğuna bakarız. Eğer dolu ise WHERE bölümüne kolon filtresi ekleriz boş ise herhangi bir kısıtlama eklemeyiz ki tüm tablo listelensin. Bu amaçla genellikel prosedür üzerinde seçmeli parametre tanımlanır.
CREATE PROCEDURE GetKategori(@KategoriId int=NULL) AS IF @KategoriId IS NULL SELECT * FROM Kategori ELSE SELECT * FROM Kategori WHERE KategoriId=@KategoriId
Bu yazım biçimine alternatif olarak aşağıdaki yöntemleri kullanabiliriz.
ISNULL() kullanımı
ALTER PROCEDURE GetKategori(@KategoriId int=NULL) AS SELECT * FROM Kategori WHERE KategoriId=ISNULL(@KategoriId,KategoriId)
Burada ISNULL() fonksiyonu parametrenin durumuna bakıp eğer @KategoriId parametresi NULL değere eşitse o zaman tablodaki kolonu yine kendisine eşitleyecektir. Yani WHERE 1=1 koşulunda farklı olmayacaktır.
COALESCE() kullanımı
Bilindiği gibi COALESCE() fonksiyonu birden fazla değeri parametre olarak alıp onlardan NULL olmayan ilk ifadeyi döndürür. Yani COALESCE(@KategoriId, KategoriId) ifadesi null olmayan değeri döndürecektir. Eğer parametre NULL değilse sadece ilgili satırı döndürür.
ALTER PROCEDURE GetKategori(@KategoriId int=NULL) AS SELECT * FROM Kategori WHERE KategoriId=COALESCE(@KategoriId,KategoriId)