Microsoft SQL Server udostępnia mechanizm procedur składowanych w celu uproszczenia procesu tworzenia bazy danych poprzez grupowanie instrukcji Transact-SQL w łatwe do zarządzania bloki. Procedury przechowywane są doceniane przez większość programistów SQL Server, którzy uważają, że korzyści z bezpieczeństwa i wydajności, które zbierają, są warte inwestycji w czasie.
Korzyści z używania zapisanych procedur
Dlaczego programista powinien używać procedur przechowywanych?
Oto kluczowe zalety tej technologii:
- Prekompilowane wykonanie: SQL Server kompiluje każdą przechowywaną procedurę raz, a następnie ponownie wykorzystuje plan wykonania. Powoduje to ogromne zwiększenie wydajności, gdy procedury przechowywane są wywoływane wielokrotnie.
- Zredukowany ruch klient / serwer: Jeśli przepustowość sieci jest problemem w twoim środowisku, z przyjemnością dowiesz się, że procedury przechowywane mogą zredukować długie zapytania SQL do pojedynczej linii przesyłanej przewodowo.
- Efektywne ponowne wykorzystanie kodu i abstrakcja programowania: Procedury przechowywane mogą być używane przez wielu użytkowników i programy klienckie. Jeśli wykorzystasz je w zaplanowany sposób, okaże się, że cykl rozwoju zajmuje mniej czasu.
- Ulepszone mechanizmy bezpieczeństwa: Można udzielić użytkownikom uprawnień do wykonywania procedury składowanej niezależnie od podstawowych uprawnień tabel.
Procedury przechowywane są podobne do funkcji zdefiniowanych przez użytkownika, ale istnieją subtelne różnice.
Struktura
Procedury przechowywane są podobne do konstrukcji widocznych w innych językach programowania.
Przyjmują dane w postaci parametrów wejściowych określonych w czasie wykonywania. Te parametry wejściowe (jeśli zostały zaimplementowane) są wykorzystywane w wykonywaniu szeregu instrukcji, które dają pewien wynik. Wynik ten jest zwracany do środowiska wywołującego za pomocą zestawu rekordów, parametrów wyjściowych i kodu powrotu.
To może brzmieć jak kęs, ale przekonasz się, że procedury przechowywane są naprawdę proste.
Przykład
Rzućmy okiem na praktyczny przykład związany z tabelą o nazwie inwentarza pokazaną na dole tej strony. Informacje te są aktualizowane w czasie rzeczywistym, a kierownicy magazynu stale sprawdzają poziomy produktów przechowywanych w ich magazynie i są dostępne do wysyłki. W przeszłości każdy menedżer uruchamiał zapytania podobne do następujących:
WYBIERZ produkt, ilośćZ zapasówWHERE Warehouse = "FL"
Spowodowało to nieefektywną wydajność na serwerze SQL. Za każdym razem, gdy menedżer magazynu wykonał zapytanie, serwer bazy danych został zmuszony do przekompilowania zapytania i wykonania go od początku. Wymagało to również od managera magazynu znajomości języka SQL i odpowiednich uprawnień dostępu do informacji o tablicy.Zamiast tego proces można uprościć za pomocą procedury przechowywanej. Oto kod procedury o nazwie sp_GetInventory, która pobiera poziomy zapasów dla danego magazynu. Kierownik magazynu w Florydzie może następnie uzyskać dostęp do poziomu zapasów, wydając polecenie: Nowojorski menedżer magazynu może użyć tej samej przechowywanej procedury, aby uzyskać dostęp do inwentarza tego obszaru: To prawda, że jest to prosty przykład, ale korzyści z abstrakcji można zobaczyć tutaj. Kierownik magazynu nie musi rozumieć języka SQL ani wewnętrznych procedur procedury. Z perspektywy wydajności procedura przechowywana działa cuda. SQL Server tworzy plan wykonania raz, a następnie ponownie go wykorzystuje, podłączając odpowiednie parametry w czasie wykonywania.Teraz, gdy nauczyłeś się korzyści z procedur przechowywanych, wyjdź na miejsce i skorzystaj z nich. Wypróbuj kilka przykładów i zmień osiągnięte ulepszenia wydajności - będziesz zaskoczony! Tabela zasobówCREATE PROCEDURE sp_GetInventory@location varchar (10)TAK JAKWYBIERZ produkt, ilośćZ zapasówWHERE Warehouse = @ lokacjaWYKONAJ sp_GetInventory "FL"WYKONAJ sp_GetInventory "NY"ID Produkt Magazyn Ilość 142 Zielone fasolki NY 100 214 Groch FL 200 825 kukurydza NY 140 512 fasola limeńska NY 180 491 Pomidory FL 80 379 Arbuz FL 85




