Start > Kursy on-line > MS SQL Server Express

MS SQL Server Express


Procedury składowane

Procedury składowane można porównać trochę do procedur, które tworzone są w językach programowania. Mogą przyjmować parametry, przetwarzać dane, wykonując szereg operacji zdefiniowanych w języku SQL i w efekcie zmieniać dane w tabelach, tworzyć tabele, usuwać je itd. Dzięki rozszerzeniom Transact-SQL zastosowanym w SQL Server, możliwe jest w ich ramach budowanie nawet instrukcji warunkowych. Aby przybliżyć zagadnienie procedury składowanej, zbudujemy jedną w naszej bazie "nowa_baza". Stworzymy procedurę, która będzie zwracała określony wynik w postaci tabeli wg podawanego parametru. Nasz program będzie prosty, jednak najważniejsze jest zaprezentowanie samej idei i możliwości jakie daje to narzędzie. Spójrzmy na graficzną opcję tworzenia procedury:



Popatrzmy teraz na strukturę procedury:



Widzimy mnóstwo komentarzy (zielone teksty), które kreator nam wstawił w celu ułatwienia użytkownikowi odnalezienia się w kodzie procedury. Kluczowe i najważniejsze jednak polecenia są zawarte pomiędzy wierszami CREATE PROCEDURE oraz END. Uprościmy więc kształt to następującej postaci:



Nasza procedura posiada jedynie jeden parametr "@klient" o typie "varchar(50)" (sposób definicji jest widoczny na zaraz po "CREATE", w przypadku większej liczby parametrów, każdą definicję oddzielamy przecinkiem) i polega na wygenerowaniu wartości sprzedaży dla podanego w nim klienta. Uruchamiając ją poleceniem Execute doprowadzimy do jej zapisania w bazie (użyjmy polecenia Refresh aby ją zobaczyć na drzewie obiektów):



Jeśli chcielibyśmy cokolwiek zmienić w istniejącej procedurze, wystarczy że w jej definicji słowo CREATE zmienimy na ALTER. Pokazane powyżej polecenie spowoduje uruchomienie procedury:



Po podaniu wartości parametru oraz naciśnięciu przycisku OK uzyskamy wynik oraz kształt polecenia ją wywołującego (w górze ekranu):



Słowa komentarza wymagają różne polecenia dodatkowe dotyczące właściwości zapytań i procedury składowanej pojawiające się w niej:

  • SET ANSI_NULLS - ustawione na ON powoduje, że ewentualne klauzule typu WHERE nazwa_kolumny = NULL nie zwrócą rekordów nawet, jeżeli w danej kolumnie występują rekordy zawierające NULL. Podobnie jest z operatorem <> NULL.
  • SET QUOTED_IDENTIFIER - definiuje w jaki sposób mają być oznaczane identyfikatory obiektów w zapytaniach, jeśli ustawione na ON teksty używane w zapytaniach powinny być otoczone pojedynczym apostrofem, natomiast identyfikatory obiektów cudzysłowem (podwójnym). Możliwe jest jednak dzięki temu użycie w identyfikatorach nawet słów kluczowych, czyli np. nazwy tabeli jako "TABLE" (co nie jest możliwe w innej sytuacji).
  • SET NOCOUNT - jeśli ustawione na ON, to procedura za każdym uruchomieniem nie będzie zwracać liczby uzyskanych w wyniku jej wykonania rekordów (dodatkowo informacja tak widoczna jest po uruchomieniu w zakładce "Messages"). W przypadku dużej liczby powtórzeń uruchomienia procedury, możemy dzięki tej opcji zredukować ruch na serwerze.