background image

Zaawansowane 

programowanie 

w T-SQL 

background image

Przegląd zagadnień

Składnie T-SQL
Obsługa błędów
Podsumowanie
Laboratorium

background image

Składnie T-SQL 

Transact-SQL (T-SQL) to implementacja języka SQL w 

systemie Microsoft SQL Server. Język ten nieco różni się 

od standardu, ale większość podstawowych definicji jest 

taka, jak w standardzie.
T-SQL - z języka zapytań stał się językiem 

programowania baz danych.  

background image

Instrukcje sterujące

Jednymi z częściej używanych składni są instrukcje 

sterujące.
Instrukcja sterująca IF...ELSE daje możliwość warunkowego 

wykonywania bloków kodu. W implementacji T-SQL wygląda 

ona jak poniżej.

DECLARE @zmienna int
SET @zmienna = 100
IF @zmienna > 100    

PRINT 'Zmienna jest większa niż 100‘

ELSE

BEGIN    

PRINT 'Zmienna jest mniejsza niż 100'    
SET @zmienna = 0 -- zerowanie zmiennej

END

background image

Instrukcje sterujące

Kolejna składnia sterująca to pętla WHILE. W T-SQL 

wygląda to następująco.

DECLARE @zmienna int
SET @zmienna = 0

WHILE @zmienna < 10
BEGIN

PRINT 'Iteracja nr ' + CAST(@zmienna AS 

varchar(2))

SET @zmienna = @zmienna + 1

END

background image

Kursory

Kursor to zestawy rekordów umieszczanych w pamięci i

przechowujących wyniki zapytań typu SELECT.
Umożliwiają zaawansowane formatowanie wyników

wyszukiwania danych i przetwarzanie rekordów jeden po

drugim

(ale

w

ściśle

określonej

kolejności

determinowanej przez wynik zapytania, które stanowi

definicję kursora).

background image

Kursory

DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM Northwind.dbo.Employees
WHERE LastName like 'B%'

OPEN Employee_Cursor

FETCH NEXT FROM Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN

FETCH NEXT FROM Employee_Cursor

END

CLOSE Employee_Cursor
DEALLOCATE Employee_Cursor

background image

Składnie specjalne

Nowoczesne języki SQL obfitują w specjalne składnie, 

które znacznie rozszerzają jego funkcjonalność.
Przykładem takiej składni może być PIVOT.
Składnia ta umożliwia stworzenie tabeli wynikowej z 

zapytania SELECT, w której na nagłówkach wierszy 

i kolumn znajdują się wartości z tabel źródłowych.

background image

Składnie specjalne

USE AdventureWorks
GO
SELECT VendorID, [164] AS Emp1, [198] AS Emp2, 
[223] AS Emp3, [231] AS Emp4, [233] AS Emp5
FROM 
(SELECT PurchaseOrderID, EmployeeID, VendorID
FROM Purchasing.PurchaseOrderHeader) p
PIVOT
(
COUNT (PurchaseOrderID)
FOR EmployeeID IN
( [164], [198], [223], [231], [233] )
) AS pvt
ORDER BY VendorID;

background image

Składnie specjalne

-- Przykładowy wynik
VendorID    Emp1        Emp2        Emp3        Emp4        Emp5
1           4           3           5           4           4
2           4           1           5           5           5
3           4           3           5           4           4
4           4           2           5           5           4
5           5           1           5           5           5

Powyższy wynik obrazuje możliwości tej składni 
umożliwiając zbudowanie tabeli wyświetlającej ilość 
zamówień u wybranych producentów dokonanych 
przez pięciu pracowników (każdy pracownik o 
określonym EmployeeID).

background image

Obsługa błędów - Gdzie wykrywać błędy?

W trakcie działania kodu SQL mogą wydarzyć się 

nieprzewidziane błędy. 
Mogą to być błędy wynikające:

z narzuconych w bazie danych ograniczeń,

błędy wynikające z prób wykonania niedozwolonych 
operacji. 

Wykrycie tych błędów i odpowiednia na nie reakcja to 

zadanie dla programisty baz danych.

background image

Obsługa błędów - Gdzie wykrywać błędy?

Błędy wykrywamy najczęściej w:

transakcjach - po wykryciu błędu wycofujemy transakcję,

procedurach składowanych - wykrywamy błędy powstałe 

głównie w wyniku niepoprawnych wartości parametrów przez 

użytkownika,
triggerach - podobnie jak w transakcjach, po napotkaniu 

błędu wycofywana jest transakcja wywołująca trigger,
blokach kodu SQL - wszelkie rozbudowane bloki kodu 

wymagają wykrywania błędów. 

background image

Obsługa błędów 

Metody wykrywania błędów
Jak można wykrywać błędy? Metod na to jest wiele. 
Po pierwsze można zastosować składnie sterujące, np. 

IF...ELSE, do sprawdzania wartości zmiennych jeszcze 

przed wystąpieniem błędu. 
Druga metoda to wykorzystanie istniejących w SZBD funkcji 

wykrywających błędy. 

W systemie Microsoft SQL Server taką funkcją jest 

@@ERROR, która zwraca numer błędu napotkanego w 

ostatnio napotkanego błędu w bieżącej sesji.

background image

Obsługa błędów 

Metody wykrywania błędów
Aktualnie istnieją także inne, lepsze metody wykrywania 

i obsługi błędów. 
Chodzi o strukturalną obsługę wyjątków. 

Jako wyjątek rozumiemy błąd, który wymaga obsługi. 

Poniższy fragment kodu obrazuje przykładową obsługę 

wyjątków przy pomocy składni TRY...CATCH (TRY - próbuj, 

CATCH - przechwyć i obsłuż).

background image

Podsumowanie

Składnie T-SQL
Obsługa błędów

Programowanie w języku zapytań to ważna umiejętność. 

Powinni ją opanować zarówno programiści, jak i 

administratorzy. Różne języki SQL oferują różne składnie. 

Jednak reguły, jakimi powinien kierować się tworzący kod, są 

te same nizależnie od SZBD. Bardzo często opanowanie w 

zaawansowanym stopniu składni jednego języka pozwala w 

przyszłości na łatwe opanowanie innego.

background image

Laboratorium

Instrukcja sterująca CASE 

Instrukcja PIVOT 

Stronicowane danych z użyciem funkcji rankingu

Obsługa błędów