Ćwiczenia > Język T-SQL > Inne elementy języka T-SQL

4.4 Inne elementy języka T-SQL



Oprócz poleceń wymienionych w poprzednich lekcjach język T-SQL zawiera też inne elementy, jak funkcje systemowe czy instrukcje sterujące. Możliwość korzystania z tych elementów sprawia, że możemy praktycznie mówić o programowaniu w T-SQL.

Do przeprowadzenia niniejszego ćwiczenia niezbędne jest wcześniejsze przeprowadzenie ćwiczenia z lekcji 3.10 Import i eksport danych (musisz zaimportować dane do bazy danych Biblioteka).


Krok 1 - Użyj zmiennej w zapytaniu T-SQL

1. Uruchom program Query Analyzer.
2. Zaloguj się używając uwierzytelnienia systemu Windows.
3. W menu głównym programu wybierz File - Open.
4. W oknie Open Query File wybierz plik demo_4_4_1.sql.
5. Zaznacz i uruchom (klawisz F5) fragmenty kodu oznaczone w komentarzach jako (1) oraz (2).


-- (1) ustawmy Biblioteke jako baze robocza 
USE Biblioteka
GO

-- (2) przyklad uzycia zmiennej
DECLARE @rok char(4)
SET @rok = '2002'

SELECT tytul
FROM Ksiazki
WHERE rok_wydania = @rok


Wynikiem wykonania powyższego kodu jest ustawienie bazy danych Biblioteka jako bazy roboczej oraz wyświetlenie tytułów książek wydanych w roku 2002.

tytul                                                                                                
--------------- 
UML w kropelce
XML na poważnie

(2 row(s) affected)
W zapytaniu użyto zmiennej @rok (przed nazwą zmiennej zawsze pojawia się symbol "@") typu char(4). Wartość zmiennej ustawiono na 2002.

Zapamiętaj, że zmienne deklarujemy używając polecenia DECLARE, zaś wartości ustawiamy bezpośrednio przy użyciu polecenia SET lub pośrednio jako pojedynczą wartość z wyniku zapytania.

Krok 2 - Zobacz w działaniu instrukcję sterującą CASE

1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (3).


-- (3) przyklad uzycia instrukcji CASE
SELECT
tytul,
'kiedy wydano' = CASE
WHEN rok_wydania > 2002 THEN 'po 2002 roku'
ELSE 'przed 2002 rokiem'
END
FROM Ksiazki
GO


Wynikiem wykonania powyższego kodu jest wyświetlenie tytułów wszystkich książek z tabeli Ksiazki z dopiskiem, czy zostały wydane przed, czy po 2002 roku.

tytul                                          kiedy wydano      
---------------------------------------------- ----------------- 
SQL Server 2000. Vademecum Administratora      przed 2002 rokiem
Windows Server 2003. Vademecum Administratora  po 2002 roku
UML w kropelce                                 przed 2002 rokiem
MS Access wersja 2002 dla ekspertów            po 2002 roku
XML na poważnie                                przed 2002 rokiem

(5 row(s) affected)

W zapytaniu została użyta instrukcja sterująca CASE, która w zależności od warunku wypełniła dodatkową kolumnę w wynikach odpowiednim tekstem.

Krok 3 - Zlicz wiersze, na które wpływ miało ostatnio wykonane zapytanie

1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (4).


-- (4) uzycie funkcji systemowej @@ROWCOUNT
SELECT tytul FROM Ksiazki
SELECT @@ROWCOUNT AS [Ilosc rekordow (1)]
SELECT @@ROWCOUNT AS [Ilosc rekordow (2)]
GO


Wynikiem wykonania powyższego kodu jest wyświetlenie wszystkich tytułów książek z tabeli Ksiazki, na następnie ich ilości.

tytul                                                                                                
--------------------------------------------- 
SQL Server 2000. Vademecum Administratora
Windows Server 2003. Vademecum Administratora
UML w kropelce
MS Access wersja 2002 dla ekspertów
XML na poważnie

(5 row(s) affected)

Ilosc rekordow (1) 
------------------ 
5

(1 row(s) affected)

Ilosc rekordow (2) 
------------------ 
1

(1 row(s) affected)
Funkcja systemowa @@ROWCOUNT zlicza wiersze, które zostały w jakikolwiek sposób objęte działaniem ostatnio wykonanego zapytania T-SQL. Zauważ, że po użyciu tej funkcji ponowne jej wykonanie zwraca liczbę 1. Zatem jeśli chcesz dalej korzystać z pierwotnie pobranej liczby, musisz ją wcześniej zapisać pod zmienną.

Funkcje systemowe zawsze po wywołaniu wracają do domyślnej wartości zwracanej. Pamiętaj o tym, by w Twoich skryptach nie zdarzyły się błędy logiczne - takie najtrudniej samemu wykryć.

Krok 4 - Wykorzystaj instrukcję sterującą IF...ELSE do obsługi błędów

1. Zaznacz i uruchom (F5) fragment kodu oznaczony w komentarzu jako (5).


-- (6) uzycie funkcji systemowej @@ERROR
-- oraz instrukcji IF...ELSE
INSERT INTO Ksiazki(tytul,rok_wydania,ID_wydawnictwa)
VALUES ('SQL','2003',1000)

IF @@ERROR <> 0
	PRINT 'Wystapil blad.'
ELSE
	PRINT 'Nie wystapil blad.'
GO


Wynikiem wykonania powyższego kodu jest informacja o błędzie z dodatkowym zdaniem pochodzącym z instrukcji IF...ELSE (poniżej zaznaczyliśmy to zdanie na czerwono), instrukcji sterującej typowej dla języków programowania.

Server: Msg 547, Level 16, State 1, Line 1
(... tu informacja serwera o błędzie ...)
Wystapil blad.
Funkcja systemowa @@ERROR zwraca numer błędu napotkanego przy wykonywaniu ostatniego polecenia T-SQL. Jeśli błąd nie wystąpił funkcja zwraca wartość 0. W powyższym przykładzie wystąpił błąd o numerze 547 (dotyczy wartości klucza obcego), ponieważ usiłowaliśmy dodać rekord zawierający wartość pola ID_wydawnictwa, która nie istnieje w tabeli Wydawnictwa (w ten sposób za pomocą związków i kluczy obcych serwer wymusza spójność danych).

Jeśli kod wykonywany przez instrukcję IF...ELSE (lub inną instrukcję sterującą) składa się z większej ilości wierszy niż jeden, należy ów wykonywany kod ująć między słowa BEGIN oraz END.


Instrukcje sterujące CASE i IF...ELSE mają różne przeznaczenie. Stosuj instrukcję CASE wewnątrz zapytań T-SQL (jak SELECT), zaś instrukcję IF...ELSE pomiędzy zapytaniami T-SQL.


Funkcja systemowa @@ERROR jest najczęściej wykorzystywana w transakcjach i procedurach składowanych. Dlatego więcej przykładów jej wykorzystania zobaczysz w lekcjach dotyczących tych właśnie zagadnień.


Oprócz wymienionych instrukcji sterujących CASE oraz IF...ELSE często wykorzystuje się też instrukcję WHILE, której przykład zastosowania zobaczysz w następnej lekcji.


Do projektu Prace dyplomowe dołącz skrypt elementy_tsql.sql, w którym zastosuj zmienne i instrukcje sterujące do przykładowego wyświetlenia danych (czyli użyj polecenia SELECT).


Przejdź dalej



Ćwiczenia > Język T-SQL > Inne elementy języka T-SQL