Procedury składowane to nic innego jak przygotowany kod SQL, który może być wielokrotnie używany. Jeżeli więc masz na myśli zapytanie, które piszesz wielokrotnie warto zapisać je jako procedurę składowaną, którą będzie gotowa do wielokrotnego użytku za każdym razem kiedy będzie Ci potrzebna.
Oprócz uruchamiania wielokrotnie tego samego kodu SQL będziesz miał możliwość przekazania parametrów do zapisanej procedury – w zależności od przekazanych parametrów wynik działania takiej procedury będzie inny.
Tworzenie prostej procedury
Zanim utworzysz procedurę składowaną muszisz wiedzieć jaki jest wynik końcowy, niezależnie czy wybierasz dane, czy chcesz je wstawić itd.
W tym prostym przykładzie pobierzemy wszystkie dane z tabeli Person.Address
1
SELECT * FROM Person.Address
Podczas tworzenia procedury możesz użyć polecenia CREATE PROCEDURE lub CREATE PROC. Po nazwie procedury należy użyć słowa kluczowego AS a reszta to zwykły kod SQL.
Warto mieć na uwadzę, że w procedurze składowanej nie można używać słowa kluczowego GO. Kiedy kompilator SQL zauważy to słowo kluczowe uzna, że jest to koniec naszej procedury.
Używanie zmiany kontekstu bazy danych również nie jest dopuszczalne: USE dbName. Powodem jest to, że część procedury byłaby traktowana jako osobny pakiet a z definicji jest to zbiór jednej serii poleceń.
Prawdziwą potęgą procedur składowanych jest możliwość przekazywania parametrów i oczekiwania różnych wyników – związane jest to z odpowiednim przygotowaniem zapytań.
Pojedynczy parametr
W tym przykładzie przygotujemy zapytanie do tabeli Person.Address, które będzie nam zwracało wyniki ograniczone jedynie do konkretnego miasta. Wymaga to zatem przekazania do procedury jednego, dodatkowego parametru:
1
EXEC dbo.uspGetAddressByCity @City = 'New York'
W obu przypadkach silnik bazy danych zakłada, że parametr zostanie przekazany. Jeżeli nie, możecie spodziewać się poniższego komunikatu błędu:
W większości przypadków dobrą praktyką jest przekazywanie wartości NULL, nie zawsze jednak jest to możliwe. W poniższym przykładzie pokażę Wam jak przekazać domyślną wartość tak aby nie było konieczności określania wartości dla parametru oczekiwanego przez procedurę. Jeżeli przygotujemy i uruchomimy taką procedurę nie zostaną zwrócone żadne dane ponieważ zapytanie będzie poszukiwało wartości NULL dla kolumny City:
Przekazywanie wielu parametrów nie jest skomplikowane. Wystarczy podać każdy parametr oraz jego typ oddzielone od siebie przecinkiem tak jak zostało to pokazane poniżej:
W poprzednich podrozdziałach skupiliśmy się na przekazywaniu parametrów do procedur. Odwrotną sytuajcą jest przekazywanie wartości parametrów z procedury składowanej. Jedynym z przykładów może być wywołanie kolejnej procedury, która nie zwraca żadnych danych ale zwraca wartości parametrów, które mogą być użyte przez inną procedurę.
Definiowanie takich parametrów jest bardzo podobne do parametrów wejściowych z taką różnicą, że musimy użyć słowa kluczowego OUTPUT. Zamiennie można używać słowa kluczowego OUT: