Stored Procedure – Tek Parametreyle Tek veya Tüm Kayıtları Seçme

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)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Time limit is exhausted. Please reload CAPTCHA.