T-SQL IF – Instrukcja warunkowa If Then Else w Transact-SQL

Czym jest instrukcja warunkowa IF i jak jej używać w Transact-SQL?

Jeśli uczysz się programowanie, zapewne samej instrukcji IF w Transact-SQL nie muszę Ci przedstawiać. Wstęp jednak tego wymaga. Transact-SQL IF THEN ELSE to typowa instrukcja warunkowa. Wykonuje blok kodu, jeśli warunek ujęty przed blokiem jest spełniony. Jeśli nie jest spełniony mamy do dyspozycji opcjonalny warunek ELSE. Instrukcję IF THEN ELSE w SQL Server możemy używać w T-SQL m. in. w blokach anonimowych, procedurach, funkcjach, triggerach. Składnia T-SQL  If Then Else wygląda następująco:

--tomaszkenig.pl
IF Boolean_expression_1
     {...polecenie wykonywane, gdy warunek_1 jest spełniony - ma wartość TRUE...}   
[ ELSE IF Boolean_expression_2  
     {...polecenie wykonywane, gdy poprzedni z warunków nie jest spełniony, a bieżący jest spełniony - wszystkie powyższe warunki = FALSE...}]
[ ELSE   
     {...polecenie wykonywane, gdy żaden z powyższych warunków nie jest spełniony - wszystkie powyższe warunki = FALSE...}]

Bloki ELSE IF i ELSE są opcjonalne i nie musimy ich uzupełniać. Instrukcje T-SQL IF możemy także zagnieżdżać tworząc kilka takich instrukcji wewnątrz siebie, o czym piszę w kolejnych punktach.

 

Przykłady wykorzystania T-SQL IF THEN ELSE

Poniżej prosty przykład z wykorzystanie instrukcji IF w Transact-SQL. Tworzymy zmienną liczbową i przypisujemy do niej losową liczbę od 1 do 100 za pomocą funkcji ROUND i RAND. Następnie dla tej właśnie liczby wyświetlamy komunikat za pomocą polecenia PRINT informujący nas, czy liczba znajduje się w zakresie od 0 do 50, czy od 51 do 100.

--tomaszkenig.pl
DECLARE @floValue float;
BEGIN
SET @floValue =ROUND(RAND()*100,0);

IF @floValue between 0 and 50
    print 'Wylosowana liczba znajduje się w zakresie 0-50. Wylosowana liczba to: ' + cast(@flovalue as varchar(max));
ELSE 
    print 'Wylosowana liczba znajduje się w zakresie 51-100. Wylosowana liczba to: ' + cast(@flovalue as varchar(max));
END;
Kurs SQL Server - IF T-SQL
Kurs SQL Server – IF T-SQL

W składni instrukcji Transact-SQL IF ELSE możesz użyć także bloku kodu BEGINEND. Tą samą instrukcję możemy zapisać także w ten sposób:

--tomaszkenig.pl
DECLARE @floValue float;
BEGIN
SET @floValue =ROUND(RAND()*100,0);

IF @floValue between 0 and 50
  BEGIN
    print 'Wylosowana liczba znajduje się w zakresie 0-50. Wylosowana liczba to: ' + cast(@flovalue as varchar(max));
  END
ELSE 
   BEGIN
     print 'Wylosowana liczba znajduje się w zakresie 51-100. Wylosowana liczba to: ' + cast(@flovalue as varchar(max));
   END
END;

 

Instrukcja IF ELSE W Transact- SQL. Zagnieżdżona instrukcja IF w Transact-SQL

Rozbudujmy poprzedni przykład. Chcemy, by instrukcja T-SQL IF mogła wskazywać 3 różne wyniki dla zakresów 0-33, 34-66 i 67-100. W jaki sposób to zrobić? Jedyne, co powinieneś zrobić to dodać instrukcję T-SQL ELSE IF z dodatkowym warunkiem. Możliwe jest także dodanie zagnieżdżonej instrukcję IF w bloku IF lub w bloku ELSE.

--tomaszkenig.pl
BEGIN 
declare @floRandom float;
declare @varText varchar(255);

set @varText = 'Wylosowana liczba to: '
set @floRandom = FLOOR(RAND()*100);

print 'Program do losowania liczb z przedziału od 1 do 100.'

IF @floRandom < 33 
 print 'Wylosowana liczba jest mniejsza od 33. Wylosowana liczba to: ' + CAST(@floRandom as varchar(3))
ELSE IF @floRandom < 66
  print 'Wylosowana liczba jest większa od 33 i mniejsza niż 66. Wylosowana liczba to: ' + CAST(@floRandom as varchar(3))
ELSE 
 print 'Wylosowano liczbę większą od 66 i mniejszą niż 100. Wylosowana liczba to: ' + CAST(@floRandom as varchar(3))
END;
Kurs SQL Server - ELSE IF Transact-SQL
Kurs SQL Server – ELSE IF Transact-SQL

 

Kasowanie obiektów bazodanowych za pomocą instrukcji IF w T-SQL

Za pomocą instrukcji IF T-SQL możesz także sprawdzić, czy dany obiekt jak tabela, widok, funkcja, czy procedura występuję w Twojej bazie danych i w razie występowania np go skasować. W niektórych językach SQL np w Oracle występuje polecenie tworzenia obiektów z opcjonalnym kasowaniem istniejącego obiektu o tej samej nazwie. Piszemy wtedy polecenie CREATE OR REPLACE. SQL Server w każdej wersji nie posiada takich funkcjonalności. Możesz natomiast wykonać dokładnie tak samo działanie kasując obiekt, jeśli obiekt o tej nazwie istnieje. By sprawdzić, czy dany obiekt istnieje w bazie i ewentualnie go skasować stosujemy poniżej zapisaną składnię z użyciem T-SQL IF.

--tomaszkenig.pl
IF OBJECT_ID('OBJECT_NAME','OBJECT_TYPE') IS NOT NULL
   DROP OBJECT_TYPE OBJECT_NAME;

Jak widzisz, w poleceniu wykorzystujemy funkcję OBJECT_ID, w której w pierwszym argumencie wprowadzamy nazwę obiektu, a więc np nazwę tabeli, procedury, widoku, funkcji, bazy danych itp. W drugim argumencie wprowadzamy element, którego występowanie w bazie sprawdzamy, a więc:

  • table dla tabel
  • view dla widoków
  • procedure dla procedur
  • function dla funkcji
  • database dla baz danych

W instrukcji wykonywanej, gdy warunek jest spełniony kasujemy obiekt poleceniem DROP, a więc np:

  • DROP TABLE
  • DROP VIEW
  • DROP PROCEDURE
  • DROP FUNCTION
  • DROP DATABASE

Poniżej przykład kasujący tabelę o nazwie tbTest. Zaraz za poleceniem kasowania tabeli możemy utworzyć tabelę o dokładnie tej samej nazwie.

--tomaszkenig.pl
IF OBJECT_ID('TbTest','table') IS NOT NULL
   DROP TABLE TbTesT;

Create table TbTest (id int identity(1,1),
MyValue1 nvarchar(255),
MyValue2 nvarchar(255),
date datetime2 default getdate()
);
Kurs SQL Server - IF Transact-SQL. Kasowanie tabeli, jeśli istnieje.
Kurs SQL Server – IF Transact-SQL. Kasowanie tabeli, jeśli istnieje.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *