Eğer SQL dilinde birşeyler geliştiriyorsanız muhtemelen benim gibi sizde bazen sorguya tüm parametrelerin gelmeme ihtimalini göz önüne almış olabilirsiniz. Mesela bir arama formunda birden fazla arama alanından dolu olanları filitrelemek istiyorsanız işte yapmanız gereken şey bu örnekte bulunmakta.
CREATE TABLE iletisim ( id int identity primary key, isim varchar(20), mail varchar(30) ); INSERT INTO iletisim (isim, mail) VALUES ('halit', '[email protected]'), ('ahmet', '[email protected]');
Yukarıda basitçe bir tablo oluşturduk ve iki kayıt giriyoruz. Şimdi bu kayıt üzerinde escape yöntemiyle sorgu kuralım.
DECLARE @kimo varchar(20); --set @kimo = 'halit'; select * from iletisim where (isim = @kimo or @kimo IS NULL);
Yukarıda ki kod bloğunda commentlenen satır kimo değişkenini setliyor. Tabi şu anda kimo değeri null ve where şunu düşünüyor isim ile kimo eşit olacak ama durun kimo null ise bunu kontrol etmeme gerek yok! Yani satır commentli iken tüm kayıtlar geliyor. Satırın commenti kaldırıldığında ise durum değişiyor kimo artık null değil ve isim alanı kimo ya eşit olanları araması mecbur. Dışardan parametre mantığıyla alabileceğiniz gibi string ifade içerisinde de aynı şekilde direk null e eşitleyerek de çalışabilirsiniz. Yani string SQL komutunuz şu olur ise,
select * from iletisim where (isim = NULL or NULL IS NULL);
tüm kayıtlar dökülür aynı zamanda tam tersi şekilde stringi şu şekilde oluşturursanız
select * from iletisim where (isim = 'halit' or 'halit' IS NULL);
bu durumda da sadece isim değeri halit olanlar gelir. Her ne kadar T-SQL üzerinde yapılmış olsa da bu örnek tüm SQL lerde aynı mantık çalışmaktadır.
Uygulamanın demosu SQLFiddle üzerinde şu adrestedir, deneyebilirsiniz. http://sqlfiddle.com/#!6/aedc4/5/0
Ayrıca resimde de farklı bir tabloda değişkenin değerini değiştirerek iki sonuç ürettim ona da bakabilirsiniz.
Esenlikle…
Bir cevap yazın