Uruchamianie procedury składowanej odbywa się poleceniem EXEC z opcjonalnym przekazaniem parametrów.
Znaczenie procedury składowanej w SQL Server
Procedura składowana w Microsoft SQL Server jest nazwanym zestawem instrukcji języka Transact-SQL przechowywanym w bazie danych. Może zawierać zapytania SELECT, INSERT, UPDATE, DELETE, instrukcje warunkowe, obsługę błędów oraz wywołania innych procedur. Uruchomienie procedury powoduje wykonanie zapisanych w niej instrukcji w kontekście określonej bazy danych i połączenia z serwerem.
Do wywołania procedury w SQL Server służy instrukcja EXECUTE, której skrócona forma to EXEC. Najprostsze wywołanie ma postać EXEC dbo.NazwaProcedury;. Prefiks dbo wskazuje schemat, w którym znajduje się obiekt. Podanie schematu ogranicza ryzyko niejednoznacznego odwołania i ułatwia optymalizację wyszukiwania obiektu przez silnik bazy danych.
Przekazywanie parametrów wejściowych
Procedura może przyjmować parametry wejściowe zdefiniowane podczas jej tworzenia. Przy wywołaniu można przekazać wartości pozycyjnie, zgodnie z kolejnością deklaracji parametrów, na przykład EXEC dbo.PobierzKlienta 25;. Wartości tekstowe zapisuje się w apostrofach, a wartości daty i czasu powinny być przekazywane w formacie jednoznacznie interpretowanym przez SQL Server albo jako zmienne odpowiedniego typu.
Bezpieczniejszą i czytelniejszą formą jest przekazywanie parametrów po nazwie: EXEC dbo.PobierzZamowienia @KlientId = 25, @Status = N'Aktywne';. Nazwa parametru musi odpowiadać deklaracji procedury, a parametr poprzedza znak @. Parametry pominięte przy wywołaniu otrzymują wartość domyślną, jeśli została zdefiniowana w deklaracji procedury; w przeciwnym razie wywołanie może zakończyć się błędem. Parametr o wartości NULL trzeba przekazać jawnie, ponieważ NULL oznacza brak wartości, a nie pusty tekst ani zero.
Parametry wyjściowe, wynik i obsługa błędów
Procedura może zwracać dane w postaci zestawu wynikowego generowanego przez SELECT. Może również udostępniać parametr wyjściowy oznaczony słowem OUTPUT. Przykładowe wywołanie wygląda tak: DECLARE @Liczba INT; EXEC dbo.PoliczRekordy @Wynik = @Liczba OUTPUT; SELECT @Liczba;. Zmienna musi mieć typ zgodny z typem parametru zadeklarowanym w procedurze, a przy wywołaniu konieczne jest dodanie słowa OUTPUT.
Procedura może także zwracać całkowity kod stanu za pomocą instrukcji RETURN. Kod ten odbiera się do zmiennej: DECLARE @Kod INT; EXEC @Kod = dbo.SprawdzStan; SELECT @Kod;. Wartość zwracana przez RETURN służy przede wszystkim do sygnalizowania kodu wykonania, natomiast nie zastępuje zestawu wynikowego ani parametrów wyjściowych. Błędy wykonania powinny być analizowane razem z komunikatem SQL Server, numerem błędu i miejscem jego wystąpienia. W procedurach korzystających z TRY...CATCH szczegóły błędu można odczytać między innymi przez funkcje ERROR_NUMBER(), ERROR_MESSAGE() i ERROR_LINE().
Uprawnienia i diagnostyka wywołania
Do uruchomienia procedury użytkownik musi mieć odpowiednie uprawnienie EXECUTE do obiektu albo uprawnienie wynikające z członkostwa w roli lub z uprawnień nadanych na poziomie schematu czy bazy danych. Brak uprawnienia może powodować błąd nawet wtedy, gdy sama procedura istnieje i jej definicja jest poprawna. Warto sprawdzić także, czy połączenie korzysta z właściwej bazy danych oraz czy procedura została wywołana pod prawidłową nazwą schematu.
Podczas diagnostyki należy rozróżnić błąd składni wywołania, błąd konwersji typu, brak obiektu, brak uprawnień i błąd występujący wewnątrz procedury. Istotny jest również sposób przekazywania wartości: parametr typu INT nie powinien otrzymywać niepoprawnego tekstu, a parametr wymagany nie może zostać pominięty. Jeżeli procedura wykonuje modyfikacje danych, należy uwzględnić transakcje, blokady i ewentualne wycofanie zmian. W środowisku diagnostycznym można przeanalizować definicję procedury, plan wykonania oraz komunikaty zwracane przez SQL Server, aby ustalić, czy problem dotyczy samego wywołania, danych wejściowych, czy logiki zapisanej w procedurze.