Udostępnij za pośrednictwem


Wykonywanie przechowywanych procedur (aparat bazy danych)

Aby wykonać procedura przechowywana, należy użyć Transact-SQL Instrukcja EXECUTE. Można również wykonać procedurę przechowywaną bez użycia słowa kluczowego EXECUTE, gdy procedura przechowywana jest pierwszą instrukcją w partia.

Wykonywanie procedury składowane w systemie

procedury składowane w systemie zaczynać się od znaków sp_.Są one przechowywane fizyczne w Baza danych zasób, ale logicznie pojawiają się w sys schemat bazy każdy system i zdefiniowane przez użytkownika danych w wystąpieniu SQL Server. procedury składowane w systemie mogą być wykonywane z każdej innej bazy danych bez konieczności pełni jakości Nazwa procedura przechowywanaj.Przykład jest nazwa kwalifikowana nonschema nazwę jednej części sp_someproc Nazwa trzech części, takie jak lub somedbsp_someproc z drugiej strony, nazwa schematu nie określono tego parametru.

Zaleca się, że schemat spełniasz wszystkie systemowe procedura przechowywana nazw z sys nazwy schematu do zapobiegania konfliktom nazw.W poniższym przykładzie zademonstrowano zalecanym metoda system wykonywanie procedury przechowywanej.

EXEC sys.sp_who;

W poniższych przykładach pokazano ze starszymi wersjami zgodne metod wykonywania procedury składowane w systemie.

Uwaga

Zostaną usunięte następujące metody wykonywania procedur przechowywana w systemie, w przyszłej wersja programu SQL Server. Należy unikać stosowania tych metod w nowej pracy rozwoju i zaplanować do modyfikowania aplikacji, które aktualnie używają ich.

EXEC sp_who;
EXEC master.dbo.sp_who;
EXEC mydatabase..sp_who;
EXEC dbo.sp_who;
EXEC mydatabase.dbo.sp_who;

Dopasowywanie sortowanie bazy danych

SQL Server 2008 używa wywołania sortowanie bazy danych podczas porównywania nazwy procedury.Dlatego też należy zawsze używać dokładnie przypadek nazw procedury systemu w aplikacji.Ten kod zakończy się niepowodzeniem na przykład wtedy, gdy wykonywane w odniesieniu do bazy danych, która jest uwzględniana wielkość liter sortowanie:

exec SP_heLP; -- Will fail to resolve because SP_heLP does not equal sp_help 

Użyciesys.system_objects and sys.system_parameters wykazu widoki, aby wyświetlić dokładną systemu przechowywane nazwy procedury.

Wykonywanie systemu rozszerzonych procedur przechowywanych

System rozszerzonych procedur przechowywanych zaczynać się od znaków xp_.Są one przechowywane fizyczne w Baza danych zasób, ale logicznie pojawiają się w sys schemat bazy każdy system i zdefiniowane przez użytkownika danych w wystąpieniu SQL Server. W poniższym przykładzie zademonstrowano zalecanym metoda do wykonywania system rozszerzona procedura składowana.

EXEC sys.xp_subdirs 'c:\';

Wykonywanie przechowywanych procedur zdefiniowane przez użytkownika

Podczas wykonywania użytkownika przez procedurę przechowywaną (albo w partia lub wewnątrz modułu, takich jak użytkownika procedury przechowywanej lub funkcja), firma Microsoft zdecydowanie zaleca kwalifikujących się procedura przechowywana nazwa z co najmniej nazwę schematu.

W poniższym przykładzie pokazano zalecaną metodą wykonywania procedura przechowywana przez użytkownika.

USE AdventureWorks;
GO
EXEC dbo.uspGetEmployeeManagers 50;

- Lub -

EXEC AdventureWorks.dbo.uspGetEmployeeManagers 50;
GO

Jeżeli określono nonqualified procedura przechowywana przez użytkownika, Database Engine Wyszukuje procedury w następującej kolejności:

  • The sys schema of the current database.

  • Osoby wywołującej domyślnego schematu jeśli wykonywane we wsadzie lub dynamicznych instrukcji SQL.Lub, jeśli nazwa procedury nonqualified pojawia się wewnątrz treść inną definicję procedury, schematu, zawierającą procedura ta jest następnie wyszukiwane.Aby uzyskać więcej informacji na temat domyślnych schematów zobacz Separacja schemat użytkownika.

  • The dbo schema in the current database.

Important noteImportant Note:

Jeśli żadnej procedura przechowywana utworzone przez użytkownika ma taką samą nazwę jak systemowa procedura składowana, procedura przechowywana utworzone przez użytkownika nigdy nie zostanie wykonana, jeśli używasz odwołanie nonschema kwalifikowaną nazwą.Aby uzyskać więcej informacji zobacz Tworzenie procedur przechowywanych (aparat bazy danych).

Określanie parametrów

Wartości parametrów mogą być dostarczane, gdy procedura przechowywana jest zapisywany do ich akceptowania.

Podana wartość musi być stała czy zmienną, można określić nazwę funkcja, jako wartości parametru.Zmienne mogą być zdefiniowane przez użytkownika lub zmienne systemowe, takie jak @@ spid.

W poniższych przykładach pokazano, przekazując parametry do procedura przechowywana uspGetWhereUsedProductID. Procedura spodziewa się wartości dwa parametry wejściowe: Identyfikator produktu oraz data. W przykładzie pokazano, jak przekazać parametry jako zmiennych i stałych, a także jak używać zmiennej do przekazania wartości funkcja.

USE AdventureWorks;
GO
-- Passing values as constants.
EXEC dbo.uspGetWhereUsedProductID 819, '20050225';
GO
-- Passing values as variables.
DECLARE @ProductID int, @CheckDate datetime;
SET @ProductID = 819;
SET @CheckDate = '20050225';
EXEC dbo.uspGetWhereUsedProductID @ProductID, @CheckDate;
GO
-- Try to use a function as a parameter value.
-- This produces an error message.
EXEC dbo.uspGetWhereUsedProductID 819, GETDATE();
GO
-- Passing the function value as a variable.
DECLARE @CheckDate datetime;
SET @CheckDate = GETDATE();
EXEC dbo.uspGetWhereUsedProductID 819, @CheckDate;
GO

Jeśli chcesz określić parametry w innej kolejności niż zostały zdefiniowane w kolejności procedura przechowywana, należy je nazwać.Aby uzyskać więcej informacji zobaczSpecifying a Parameter Name.

Aby określić, że parametr powinien zwracać wartość do programu wywołującego, należy użyć słowa kluczowego OUTPUT.Aby uzyskać więcej informacji zobaczSpecifying the Direction of a Parameter.

Określanie kolejności parametry

If you supply parameters in the form **@parameter =**value, you can supply them in any order.Można również pominąć parametry, których wartości domyślne zostały dostarczone.If you supply one parameter in the form **@parameter =**value, you must supply all subsequent parameters this way.If you do not supply parameters in the form **@parameter =**value, you must supply them in the order given in the CREATE PROCEDURE statement.

Podczas wykonywania procedura przechowywana, serwer odrzuca wszelkie parametry, które nie zostały dołączone do listy parametrów podczas procedury tworzenia.Każdy parametr przekazywany przez odwołanie (przechodzącego jawnie nazwę parametru) nie zostanie zaakceptowany, jeśli nie pasuje do nazwy parametru.

Przy użyciu wartości domyślnych w parametrach

Mimo że można pominąć parametry, których wartości domyślne zostały dostarczone, można tylko skrócić listę parametrów.For example, if a stored procedure has five parameters, you can omit both the fourth and the fifth parameters, but you cannot skip the fourth and still include the fifth unless you supply parameters in the form **@parameter =**value.

Wartością domyślną parametru, jeśli została zdefiniowana dla parametrów w procedurze przechowywanej, jest używany, gdy:

  • Nie wartości dla parametru jest określony, po wykonaniu procedura przechowywana.

  • Słowo kluczowe domyślny jest określany jako wartość parametru.