Udostępnij za pośrednictwem


Tworzenie procedur przechowywanych (aparat bazy danych)

Można utworzyć procedury przechowywane przy użyciu CREATE PROCEDURE Transact-SQL Instrukcja.

Przed utworzeniem procedura przechowywana, uznają, że:

  • Nie można łączyć instrukcji CREATE PROCEDURE z innych instrukcji SQL w jednej partia.

  • Aby utworzyć procedury, musi mieć CREATE PROCEDURE w bazie danych i ALTER uprawnienie dla schematu, w którym tworzony jest procedurą.Procedury przechowywane CLR musi albo własny wirtualny plik dziennika, do którego odwołuje się <method_specifier>, albo mieć uprawnienie materiały referencyjne w tym zestawie.

  • Procedury przechowywane są obiekty o zakresie schematu, a ich nazwy muszą być zgodne z zasadami dla identyfikatorów.

  • procedura przechowywana można utworzyć tylko w bieżącej bazie danych.

Po utworzeniu procedura przechowywana, należy określić:

  • Wejściowe żadnych parametrów wyjściowych do wywołania procedury lub partia i.

  • Instrukcje programowania służące do wykonywania operacji w bazie danych, włącznie z wywołaniem innych procedur.

  • Wartość stanu do wywołania procedury lub partia, aby wskazać powodzenia lub niepowodzenia (i powód awarii).

  • Każdy błąd obsługi instrukcje potrzebne i obsługiwać potencjalnych błędów.

    Przekazywanie błąd funkcje, takie jak ERROR_LINE i ERROR_PROCEDURE może być określony w procedura przechowywana.Aby uzyskać więcej informacji zobacz Za pomocą TRY... CATCH instrukcji języka Transact-SQL.

Nazewnictwo procedur przechowywanych

We recommend that you do not create any stored procedures using sp_ as a prefix.SQL Server uses the sp_ prefix to designate system stored procedures.Wybrana nazwa może powodować konflikt z niektórych przyszłych systemową procedurę.Jeśli aplikacja używa nonschema kwalifikowaną nazwę odwołania, a nazwę procedury powoduje konflikt z nazwę systemu, aplikacji zostaną przerwane, ponieważ nazwa wiąże się z procedurą systemu nie własne.

Użytkownika zdefiniowane przechowywane procedury, która ma taką samą nazwę jak system procedura przechowywana i jest nonqualified lub znajduje się w dbo schematu nigdy nie będzie wykonać d; systemowa procedura składowana będzie zawsze wykonać zamiast niego.Poniższy przykład ilustruje to zachowanie.

USE AdventureWorks;
GO
CREATE PROCEDURE dbo.sp_who
AS
    SELECT FirstName, LastName FROM Person.Contact;
GO
EXEC sp_who;
EXEC dbo.sp_who;
GO
DROP PROCEDURE dbo.sp_who;
GO

Za pomocą kwalifikator jawne schemat zawiera także zalet wydajności nieznaczne.Rozpoznawanie nazw jest trochę szybszy Jeśli Database Engine nie ma przeszukiwać wiele schematów, aby znaleźć procedurę. Aby uzyskać więcej informacji zobacz Wykonywanie procedura przechowywana.

Tymczasowych procedur przechowywanych

Prywatne i globalne tymczasowe procedury przechowywane, analogiczne do tabel tymczasowych, mogą być tworzone za pomocą # i ## prefixes dodawany do nazwy procedury.# oznacza lokalny procedura przechowywana tymczasowo; ## oznacza globalnym procedura przechowywana tymczasowo.Te procedury nie istnieją po SQL Server kończy pracę niedziałający.

Tymczasowe procedury przechowywane są przydatne podczas łączenia się ze starszymi wersjami SQL Server które nie obsługują ponownego użycia planów wykonania dla Transact-SQL instrukcje lub partii. Podłączanie do aplikacji SQL Server 2000 i wyższym powinny używać sp_executesql systemu przechowywana procedura zamiast tymczasowych procedur przechowywanych.Połączenie utworzone lokalnego tymczasową procedurę można ją wykonać, a procedura jest usuwany automatycznie po zamknięciu połączenia.

Każde połączenie może być wykonywany globalnym procedura przechowywana tymczasowo.Globalnym procedura przechowywana tymczasowo istnieje dopóki połączenia używane przez użytkownika, który utworzył procedury i wykonywane są wszystkie wersje aktualnie wykonywanie procedury przez innych połączeń.Po zamknięciu połączenia, który został użyty do utworzenia tej procedury nie dalsze wykonywanie globalnego tymczasową procedura przechowywana jest dozwolone.Aby ukończyć są dozwolone tylko tych połączeń, które już rozpocząć wykonywanie procedura przechowywana.

Jeśli nie prefiksem # procedury przechowywanej lub ## jest tworzony bezpośrednio w programie tempdb bazy danych, procedura przechowywana jest automatycznie usuwane, kiedy SQL Server jest zamknięty, ponieważ tempdb jest ponownie tworzone co czas SQL Server jest uruchomiona. Procedury tworzenia bezpośrednio w tempdb istnieje nawet po tworzenia połączenie zostanie przerwane.

Uwaga

Duże wykorzystanie tymczasowe procedury przechowywane mogą tworzyć rywalizacji w tabelach systemowych w tempdb i mieć niekorzystny wpływ na wydajność.It is recommended that sp_executesql be used instead.sp_executesql does not store data in the system tables and therefore avoids the problem.

Nie można utworzyć procedury przechowywane CLR jako tymczasowych procedur przechowywanych.

Przykłady

A.Prostą procedurę przy użyciu SELECT złożonych

Poniższa procedura przechowywana zwraca wszystkich pracowników (imion i nazwisk dostarczone), ich tytuły i ich nazwy działu z widoku.Ta procedura przechowywana nie używa żadnych parametrów.

The uspGetEmployees procedura przechowywana can be executed in these ways:

B.Za pomocą prostą procedurę z parametrami

Poniższa procedura przechowywana zwraca tylko określonego pracownika (imię i nazwisko dostarczone), jej tytuł, a jej nazwa działu z widoku.Ta procedura przechowywana akceptuje dokładne odpowiedniki dla przekazanych parametrów.

The uspGetEmployees procedura przechowywana can be executed in the following ways:

C.Za pomocą prostą procedurę z parametrami symboli wieloznacznych

Następujące procedura przechowywana zwraca tylko określonych pracowników (imion i nazwisk dostarczone), ich tytuły i ich działów z widoku.Tego wzorca procedura przechowywana parametry, przekazywane jest zgodna, lub jeśli nie, użyto domyślnej wstępnie ustawionych (ostatnia nazwy zaczynające się literą D).

The uspGetEmployees2 procedura przechowywana can be executed in many combinations. Poniżej przedstawiono tylko kilka kombinacji:

D.Korzystanie z parametrów wyjście

Poniższy przykład tworzy uspGetList Procedura przechowywana, która zwraca listę produktów, których ceny, które nie przekraczają określonej wartości. W przykładzie pokazano, korzystanie z wielu instrukcji SELECT i wiele parametrów OUTPUT.Wyjście parametry umożliwiają procedurę zewnętrznych, zadanie partia lub więcej niż jedną Transact-SQL instrukcję, aby uzyskać dostęp do wartości ustawionej w czasie wykonywania procedury.

wykonać uspGetList Aby uzyskać listę Adventure Works produkty (Rowery) koszt mniej niż 700 zł. Parametry wyjściowe @ Kosztów and @ ComparePrices są używane z językiem sterowania przepływem do zwracania wiadomości w Wiadomości okna.

Uwaga

Wyjście zmiennej musi być zdefiniowana, podczas tworzenia procedury, a także podczas używania zmiennej.The parameter name and variable name do not have to match; however, the data type and parameter positioning must match (unless @ListPrice= variable is used).

W tym polu jest zestaw wyników częściowych:

Product                                            List Price
-------------------------------------------------- ------------------
Road-750 Black, 58                                 539.99
Mountain-500 Silver, 40                            564.99
Mountain-500 Silver, 42                            564.99
...
Road-750 Black, 48                                 539.99
Road-750 Black, 52                                 539.99

(14 row(s) affected)

These items can be purchased for less than $700.00.