Ms SQL’de IF ELSE kullanımı ile alakalı olarak basit bir kaç örnekle bu yazımızı başlayıp bitirelim. Uygulamalarımı AdventureWorks2012 veri tabanı üzerinde yapıyorum.
İlk örneğimde sayı adlı bir integer tipinde bir değişken tanımlayacağım. Sales.SalesOrderDetail tablosundaki verilerin sayısına bağlı olarak şöyle bir IF ELSE yapısı kurucam. Eğer kayıtlar 30 binden fazla ise, 30 binden fazla kayıt var, değilse 30 binden az kayıt var yazdıracağım.
DECLARE @Sayi INT; SELECT @Sayi = COUNT(*) FROM Sales.SalesOrderDetail; IF @Sayi > 30000 BEGIN PRINT '30 binden fazla kayıt var'; END ELSE BEGIN PRINT '30 binden az kayıt var'; END;
Sonuç olarak Sales.SalesOrderDetail tablosunda 30 binden fazla kayıt olduğu için griye dönen 30 binden fazla kayıt var ifadesi olur.
İkinci örneğimize geçelim. Bu örneğimde iç içe IF bloğu kullanarak gerçekleştireceğim bir örnek olsun. Dış blokta ay kontrolü yapalım. Diyelim ki ay Eylül’mü. İç blokta da yıla bakalım. Yıl tek bir yıl mı, çift bir yıl mı? Yani rakam değerleri tek mi, çift mi?
IF MONTH(GETDATE()) IN (9) BEGIN PRINT 'Aylardan Eylül'; IF YEAR(GETDATE()) % 2 = 0 BEGIN PRINT 'Çift bir yıldayız'; END ELSE BEGIN PRINT 'Tek bir yıldayız'; END END;
Eğer aylardan Eylül ise bu sorgu sonucunda öncelikle Aylardan Eylül yazar. Daha sonra içteki IF bloğu yapısı çalışır ve yıla bakar eğer çift bir yılda isek Çift bir yıldayız yazar, tek bir yılda isek Tek bir yıldayız yazar.
Şimdi eğer diyelim ki Eylül ayında değiliz peki ne olur? O zaman üstteki sorgum sonusunda sadece Command(s) completed successfully yazar. Çünkü şart sağlanmamıştır ama komut doğrudur. Dolayısı ile şarttaki işlemler gerçekleşmez. İlk şart sağlanmadığı içinde içte yer alan IF bloğu sorgulanmaz bile. Burada GETDATE fonksiyonu ile ay bilgisini alıyoruz.
Son örneğimizle birlikte yazımızı bitirelim. Şimdi de IF EXISTS kullanarak bir örnek yapalım. Sales.
SalesOrderHeader tablosunda SalesOrderID değeri 3 olan veri var mı yok mu kontrol edelim.
IF EXISTS(SELECT * FROM Sales.SalesOrderHeader WHERE SalesOrderID = 3) BEGIN PRINT 'SalesOrderID değeri 3 olan kayıt mevcut' END ELSE BEGIN PRINT 'SalesOrderID değeri 3 olan kayıt yok' END;
Bu sorgum sonucunda bende SalesOrderID değeri 3 olan kayıt yok yazdı, çünkü böyle bir kayıt mevcut değil. Yani IF EXISTS ile de bir kaydın var olup var olmadığını sorgulayabiliriz ve bu duruma göre istenilen işlemi yaptırabiliriz.