CREATE PROCEDURE (języka Transact-SQL)

Tworzy procedurę składowaną.Procedura składowana to zapisana kolekcja instrukcji Transact-SQL lub odwołań do metod aparatu plików wykonywalnych języka wspólnego (CLR) programu Microsoft .NET Framework, która może przyjmować i zwracać parametry dostarczane przez użytkownika.Procedury można tworzyć na stałe lub do tymczasowego użytku w danej sesji (tymczasowa procedura lokalna) bądź do tymczasowego użytku we wszystkich sesjach (tymczasowa procedura globalna).

Procedury składowane mogą być również utworzone do automatycznego uruchomienia przy uruchomieniu wystąpienia programu SQL Server.

Topic link iconKonwencje składni języka Transact-SQL

CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ] 
    [ { @parameter [ type_schema_name. ] data_type } 
        [ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY]
    ] [ ,...n ] 
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ] 
AS { <sql_statement> [;][ ...n ] | <method_specifier> }
[;]
<procedure_option> ::= 
    [ ENCRYPTION ]
    [ RECOMPILE ]
    [ EXECUTE AS Clause ]

<sql_statement> ::= 
{ [ BEGIN ] statements [ END ] }

<method_specifier> ::=
EXTERNAL NAME assembly_name.class_name.method_name

Argumenty

  • schema_name
    The OUTPUT variable must be defined when the procedure is created and also when the variable is used.

  • procedure_name
    Nazwa nowej procedury składowanej.Nazwy procedur muszą być zgodne z regułami dotyczącymi identyfikatorów i muszą być unikatowe w bazie danych i w jej schemacie.

    Firma Microsoft zdecydowanie zaleca się nie używać prefiksu sp_ w nazwie procedury.The SQL Server clause is helpful when the parameters supplied to the procedure will not be typical, and when a new execution plan should not be cached or stored in memory. Aby uzyskać więcej informacji zobaczTworzenie procedur przechowywanych (aparat bazy danych).

    Tymczasowe procedury lokalne i globalne można tworzyć używając odpowiednio znaku krzyżyka (#) przed parametrem procedure_name (#procedure_name) dla tymczasowej procedury lokalnej lub dwóch znaków krzyżyka (##) dla tymczasowej procedury globalnej (##procedure_name).Nazw tymczasowych nie można określić dla procedur składowanych CLR.

    Pełna nazwa procedury składowanej lub tymczasowej procedury składowanej globalnej (wraz ze znakami ##) może składać się z maksymalnie 128 znaków.Pełna nazwa tymczasowej procedury składowanej lokalnej (wraz ze znakiem #) może składać się z maksymalnie 116 znaków.

  • **;**number
    Opcjonalna liczba całkowita używana do grupowania procedur o tej samej nazwie.Takie zgrupowane procedury można razem porzucać, używając pojedynczej instrukcji DROP PROCEDURE.Na przykład aplikacja orders może używać procedur o nazwach orderproc;1, orderproc;2 itd.Instrukcja DROP PROCEDURE orderproc porzuca całą grupę.Jeśli nazwa zawiera ograniczone identyfikatory, liczba nie powinna występować jako część ogranicznika; należy użyć odpowiednich ograniczników tylko wokół parametru procedure_name.

    However, the table must exist when the procedure is executed.

    • Nie można używać XML lub CLR typów zdefiniowanych przez użytkownika, jak typy danych.

    • Using the EXECUTE AS clause

    Uwaga

    This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

  • **@**parameter
    Parametr w procedurze.W instrukcji CREATE PROCEDURE można zadeklarować jeden lub więcej parametrów.Wartość każdego zadeklarowanego parametru musi być dostarczona przez użytkownika przy wywołaniu procedury, chyba że zdefiniowano wartość domyślna parametru lub ustawiono wartość równą innemu parametrowi.Procedura składowana może mieć maksymalnie 2 100 parametrów.Jeśli procedura zawiera parametry zwracające tabele i brakuje parametru w komórce, to domyślnie przekazywana jest pusta tabela.

    Określ nazwę parametru używając @ jako jej pierwszego znaku.Nazw parametru musi być zgodna z regułami dotyczącymi identyfikatorów.Parametry są lokalne dla procedury; te same nazwy parametrów mogą być używane w różnych procedurach.Domyślnie parametry mogą zastępować tylko wyrażenia stałe; nie mogą być używane zamiast nazw tabel, kolumn lub innych obiektów bazy danych.Aby uzyskać więcej informacji, zobacz EXECUTE (Transact-SQL).

    CREATE RULE (Transact-SQL)

  • [ type_schema_name**.** ] data_type
    Creates an object called a rule.Wszystkie typy danych mogą być używane jako parametr dla Transact-SQL Procedura przechowywana. Aby zadeklarować parametr wycenione tabela, aby parametr dla za pomocą tabela zdefiniowaną przez użytkownika Transact-SQL Procedura przechowywana. Check constraints are created by using the CHECK keyword of CREATE TABLE or ALTER TABLE.The cursor data type can be used only on OUTPUT parameters.Po określeniu cursor Typ danych, słowa kluczowe VARYING i Wyjście musi być także określona. Może być określona z wielu parametrów wyjściowych cursor Typ danych.

    W przypadku środowiska CLR przechowywane procedury, CHAR, varchar, tekst, ntext, obraz, kursor, user define typy tabel i Tabela Nie można określić jako parametry.Aby uzyskać więcej informacji na temat zgodności między typami środowiska CLR i SQL Server System typów danych, zobacz Mapowanie danych parametru CLR. Aby uzyskać więcej informacji na temat SQL Server System typów danych i ich składni, zobacz Data Types (Transact-SQL).

    A rule can be any expression valid in a WHERE clause and can include elements such as arithmetic operators, relational operators, and predicates (for example, IN, LIKE, BETWEEN).

    Jeśli type_schema_name nie jest określony, SQL Server Database Engine odwołania type_name w następującej kolejności:

    • The SQL Server system data types.

    • Domyślny schemat bieżącego użytkownika w bieżącej bazie danych.

    • The dbo schema in the current database.

    Numerowane procedur przechowywanych typ danych nie może być xml lub zdefiniowany przez użytkownika typ danych CLR.

  • VARYING
    Określa zestaw wyników obsługiwany jako parametr wyjściowy.Ten parametr jest konstruowany dynamicznie przez procedurę składowaną i jego zawartość może być różnaTa właściwość jest stosowana tylko do parametrów , cursor, .

  • default
    Liczba odczytów fizycznej wykonywane ostatniego czas wyzwalacz został wykonany.Jeśli default wartość jest określona, procedury mogą być wykonywane bez określenia wartości dla parametru. db_backupoperator Operatorzy kopii zapasowych bazy danych % _ [] and [^].

    Uwaga

    Wartości domyślne są zapisywane w sys.Parameters.default kolumna tylko w przypadku procedury środowiska CLR.Ta kolumna będzie mieć wartość NULL dla Transact-SQL Parametry procedury.

  • DANE WYJŚCIOWE
    Wskazuje, że jest to parametr wyjściowy.Wartość tej opcji może być zwrócona do wywołującej instrukcji EXECUTE.Użyj parametrów OUTPUT, aby zwrócić wartości obiektowi wywołującemu procedurę.Parametry text, ntext i image nie mogą być używane jako parametry OUTPUT, chyba że jest to procedura CLR.Parametr wyjściowy używający słowa kluczowego OUTPUT może być symbolem zastępczym kursora, chyba że jest to procedura CLR.Typ tabeli zdefiniowanej przez użytkownika nie może być określony jako parametr OUTPUT procedury składowanej.

  • total_logical_writes
    Moduły zapisujące dane zablokowania bazy danychW poniższej tabela przedstawiono procedury przechowywane, które są używane do modyfikowania role bazy danych.

  • RECOMPILE
    Wskazuje, że Database Engine nie nie pamięci podręcznej planu dla tej procedury i procedury jest skompilowany w czasie wykonywania. Dodaje użytkownika do bazy danych stała rola bazy danych.sp_helprole

    Aby nakazać Database Engine Aby odrzucić planów wykonania poszczególnych kwerend wewnątrz procedura przechowywana, należy użyć wskazówki dotyczącej kwerendy RECOMPILE. Aby uzyskać więcej informacji zobaczQuery Hints (Transact-SQL).sp_droprolemember

  • SZYFROWANIE
    Wskazuje, że SQL Server przekonwertuje oryginalny tekst instrukcja CREATE PROCEDURE na format obfuscated. Dane wyjściowe obfuscation nie jest bezpośrednio widoczne w dowolnym z widoki wykazu w SQL Server. xoffsetJednak tekst będzie miał dostęp do uprzywilejowanych użytkowników, którzy mieli dostęp tabele systemowe przez DAC port lub bezpośrednio dostęp do plików bazy danych.Pokrewne dynamicznego zarządzania widoki i funkcje języka Transact-SQL)Aby uzyskać więcej informacji na temat uzyskiwania dostępu do metadane systemu Zobacz Konfiguracja widoczność metadane.

    Nazwa klasy.

    Procedury utworzone za pomocą tej opcji nie mogą być publikowane w ramach SQL Server replikacja.

  • wykonać JAKO
    Zwraca nazwę identyfikator logowania użytkownika.

    Aby uzyskać więcej informacji zobaczEXECUTE AS Clause (Transact-SQL).

  • Jest numerem identyfikacyjnym logowania użytkownika.
    Określa, że procedury składowane tworzone w celu replikacji nie mogą być wykonywane dla subskrybenta.Procedura składowana utworzona z opcją FOR REPLICATION jest używana jako filtr procedur składowanych i jest wykonywana tylko podczas replikacji.Nie można deklarować parametrów, jeśli określono opcję FOR REPLICATION.Opcji FOR REPLICATION nie można określić dla procedur składowanych CLR.Opcja RECOMPILE jest ignorowana dla procedur utworzonych z opcją FOR REPLICATION.

    Procedury dotyczące replikacja ma typu obiektu RF in sys.Objects and sys.Procedures.

  • <sql_statement>
    Jedna lub więcej instrukcji Transact-SQL, które mają być zawarte w procedurze.Informacje o ograniczeniach, które mogą mieć zastosowanie można znaleźć w sekcji Uwagi.

  • Nazwa EXTERNAL assembly_name**.** class_name**.method_name
    Określa metodę zestawu .NET Framework, do której odwołuje się procedura składowana CLR.Parametr class_name musi być prawidłowym identyfikatorem programu SQL Server, który istnieje jako klasa w zestawie.Jeśli klasa ma nazwę kwalifikowaną w obszarze nazw, w której występuje kropka (
    .) oddzielająca części obszaru nazw, to nazwa klas musi być wydzielona za pomocą nawiasów kwadratowych ([]) lub cudzysłowu (""**).Określona metoda musi być statyczna w danej klasie.

    Uwaga

    W następującym przykładzie polecenie wyświetla listę numer zadania dołączony do SQL Server harmonogram. Można tworzyć, modyfikować i upuszczać obiekty bazy danych, które odwołują się do modułów środowiska wykonawczego języka wspólnego, jednak nie można wykonać te odwołania w SQL Server dopóki nie zostanie włączone Opcja CLR włączone.The sys.dm_exec_query_transformation_statsdynamiczny widok zarządzania is identified for informational purposes only.

Remarks

Tworzy wirtualne tabela, która reprezentuje dane w jednej lub wielu tabel w alternatywny sposób.

CREATE VIEW musi być pierwszą instrukcją w instancji kwerendy.Tymczasowe procedury są wyjątek od tego, ponieważ są zawsze tworzone w tempdb.To nazwa widoku.Aby uzyskać więcej informacji na temat schematów zobacz User-Schema Separation.

Instrukcja CREATE PROCEDURE nie można łączyć z innymi Transact-SQL instrukcje w jednej partia.

Określanie nazwy właściciela widoku jest opcjonalne.Jeżeli wartość parametru NULL jest przekazywana i ten parametr jest używany w instrukcja CREATE tabela lub ALTER tabela, w których kolumna odwołania nie zezwala na wartości null, Database Engine generuje błąd. Nazwa kolumny jest wymagany tylko wtedy, gdy kolumna jest określany na podstawie wyrażenie arytmetyczne, funkcja, lub stała; po dwóch lub większej liczbie kolumn w przeciwnym razie może mieć takiej samej nazwie, zazwyczaj z powodu łączyć; lub, gdy kolumna w widoku jest określona nazwa różni się od kolumny, z którego pochodzi.

Zaleca się jawne określenie wartości NULL lub NOT NULL dla każdej kolumny w tabeli tymczasowej.Opcje ANSI_DFLT_ON i ANSI_DFLT_OFF wyznaczają sposób, w jaki program Database Engine przypisuje atrybuty NULL i NOT NULL do kolumn, jeśli atrybuty te nie zostały określone w instrukcji CREATE TABLE lub ALTER TABLE.Jeśli połączenie wykonuje procedurę składowaną z innymi ustawieniami tych opcji niż połączenie, które utworzyło procedurę, to kolumny tabeli utworzonej dla drugiego połączenia mogą mieć inne ustawienia dopuszczalności wartości null i przejawiać inne zachowanie.Jeśli atrybut NULL lub NOT NULL jest jawnie podany dla każdej kolumny, to tabele tymczasowe są tworzone przy użyciu tych samych ustawień dopuszczalności wartości null dla wszystkich połączeń wykonujących procedurę składowaną.

Czy instrukcja SELECT definiująca widok.

Program Database Engine zapisuje ustawienia opcji SET QUOTED_IDENTIFIER i SET ANSI_NULLS przy tworzeniu i modyfikowaniu procedury składowanej Transact-SQL.Te oryginalne ustawienia są używane, gdy procedura składowana jest wykonywana.Dlatego wszystkie ustawienia sesji klienta dla opcji SET QUOTED_IDENTIFIER i SET ANSI_NULLS są ignorowane, gdy procedura składowana jest uruchomiona.Inne opcje SET, takie jak SET ARITHABORT, SET ANSI_WARNINGS czy SET ANSI_PADDINGS nie są zapisywane przy tworzeniu i modyfikowaniu procedury składowanej.Jeśli logika procedury składowanej zależy od konkretnego ustawienia, należy umieścić instrukcję SET na początku procedury składowanej, aby zapewnić odpowiednie ustawienie.Jeśli instrukcja SET jest wykonywana w procedurze składowanej, to ustawienie pozostaje aktywne tylko do zakończenia wykonania procedury składowanej.Następnie ustawieniu przywracana jest wartość określona dla procedury składowanej przed jej wywołaniem.Pozwala to poszczególnym klientom na ustawianie żądanych opcji bez wpływu na logikę procedury składowanej.

Uwaga

Całkowity czas PROCESORA w mikrosekundach), która została wykorzystana przez wykonań tego wyzwalacza, ponieważ został on skompilowany.Na przykład, jeśli zmienna jest zdefiniowana jako char(3), a następnie ustaw na wartość większą niż trzy znaki, danych jest obcinana do określonego rozmiaru i INSERT lub instrukcja UPDATE zakończy się pomyślnie.

Klauzula ORDER BY nie gwarantuje zamówione wyniki, gdy widok jest kwerenda, ORDER BY również określono w samej kwerendzie.

Parametry procedura przechowywana środowiska CLR może być jednym z wartość skalarna SQL Server System typów danych.

Dla Database Engine Aby odwołać się poprawna metoda, gdy jest przeciążony w programie .NET Framework, metoda wskazany w <method_specifier> musi mieć następujące cechy:

  • Odwołanie do tabela tymczasowa lub zmiennej tabeli.

  • Otrzymuj taką samą liczbę parametrów, jak liczba parametrów w procedurze.

  • Nie jest konstruktorem ani destruktorem w swojej klasie.

  • Typy parametrów, które są zgodne z typami danych z odpowiednich parametrów należy użyć SQL Server procedura. Aby uzyskać informacje dotyczące zgodności SQL Server typy danych do .NET Framework typy danych, zobacz Mapowanie danych parametru CLR.

  • Zwraca pustą lub wartością typu SQLInt32, SQLInt16, System.Int32, lub System.Int16.

  • Wszystkie aktualizacje wprowadzone bezpośrednio do odpowiednich tabel w widoku nie są weryfikowane względem w widoku, nawet jeśli zostanie określona opcja CHECK.

Uzyskiwanie informacji dotyczących procedur składowanych

Aby wyświetlić definicję Transact-SQL procedura przechowywana, za pomocą sys.sql_modules wykazu widoku w bazie danych, w którym istnieje procedury.

Na przykład:

USE AdventureWorks;
GO
SELECT definition 
FROM sys.sql_modules 
JOIN sys.objects ON sys.sql_modules.object_id = sys.objects.object_id AND TYPE = 'P';

Uwaga

Tekst utworzony za pomocą opcji szyfrowanie procedura przechowywana, nie można przeglądać za pomocą sys.sql_modules Służy do wyświetlania katalogu.

W przypadku raportu o obiektach odwołuje się procedura kwerendy sys.sql_expression_dependencies katalogu widoku lub użyć sys.dm_sql_referenced_entities and sys.dm_sql_referencing_entities.

Aby wyświetlić informacje na temat środowiska CLR procedury przechowywane, należy użyć sys.assembly_modules wykazu widoku w bazie danych, w którym istnieje procedury.

Aby wyświetlić informacje dotyczące parametrów, które są zdefiniowane w procedura przechowywana, za pomocą sys.Parameters wykazu widoku w bazie danych, w którym istnieje procedury.

Ponadto wykonywanie instrukcji ALTER tabela niepowodzenie instrukcji na tabele uczestniczące w widokach, które mają wiązanie schematu, gdy instrukcje te mają wpływ na definicję widoku.

Można tworzyć procedury składowane, odwołujące się do tabel, które jeszcze nie istnieją.W momencie tworzenia wykonywane jest tylko sprawdzenie składni.Procedura składowana nie jest kompilowana, aż do pierwszego wykonania.Tylko podczas kompilacji wszystkie obiekty, do których odwołuje się procedura składowana, są rozpoznawane.Dlatego poprawna składniowo procedura składowana może być utworzona, nawet jeśli odwołuje się do nieistniejących tabel. Jeśli jednak procedura składowana odwoła się do nieistniejącej tabeli podczas wykonywania, to spowoduje błąd.Aby uzyskać więcej informacji, zobacz Deferred Name Resolution and Compilation.

Widok może składać się maksymalnie z 1024 kolumn.

Przy wykonywaniu procedury składowanej zdefiniowanej przez użytkownika, w partii lub wewnątrz modułu, takiego jak procedura składowana lub funkcja zdefiniowana przez użytkownika, zdecydowanie zaleca się kwalifikowanie nazwy procedury składowanej z nazwą schematu.

Wartości parametrów mogą być dostarczane, jeśli procedurę składowaną napisano tak, by je akceptowała.Dostarczana wartość musi być stałą lub zmienną.Nie można określić nazwy funkcji jako wartości parametru.Zmienne mogą być definiowane przez użytkownika lub systemowe, np. @@SPID.

Aby uzyskać więcej informacji zobaczWykonywanie przechowywanych procedur (aparat bazy danych).

Gdy procedura jest wykonywane po raz pierwszy, jest kompilowany do ustalenia planu optymalne dostępu do pobierania danych.Następne wykonania procedura przechowywana może ponownie użyć planu już generowane, jeśli nadal pozostaje w pamięci podręcznej planu Database Engine. Aby uzyskać więcej informacji zobaczWykonanie planu buforowanie i ponowne użycie.

Parametry, które korzystają z typ danych kursor

Transact-SQL procedury przechowywane mogą używać kursor Typ danych tylko dla operacji OUTPUT parametrów. Jeśli kursor typ danych jest określony dla parametru, są wymagane parametry VARYING i wyjście.Jeśli słowo kluczowe VARYING został określony dla parametru, musi być typu danych kursor i wyjście słowo kluczowe musi być określona.Aby uzyskać więcej informacji zobaczUsing the cursor Data Type in an OUTPUT Parameter.

Tymczasowych procedur przechowywanych

The Database Engine supports two types of temporary procedures: lokalne i globalne. Lokalne tymczasową procedurę jest widoczna tylko dla połączenia, który go utworzył.Globalne tymczasową procedurę jest dostępna dla wszystkich połączeń.Lokalne tymczasowe procedury są automatycznie usuwane po zakończeniu bieżącej sesja.Globalne tymczasowe procedury są usuwane po zakończeniu ostatniej sesja przy użyciu procedury.Aby uzyskać więcej informacji zobaczTworzenie procedur przechowywanych (aparat bazy danych).

Automatyczne wykonywanie przechowywanych procedur

Jeden lub więcej procedury przechowywane mogą być wykonać automatycznie po SQL Server zostanie uruchomiony. Procedury przechowywane, muszą być tworzone przez administrator systemu w wzorzec bazy danych i wykonywane w ramach sysadmin ustala rolę serwera jako proces w tle.Te procedury nie może zawierać wszystkie parametry wejściowe i wyjściowe.Aby uzyskać więcej informacji zobaczAutomatic Execution of Stored Procedures.

Zagnieżdżanie procedura przechowywana

Procedury przechowywane mogą być zagnieżdżane.Oznacza to, że w jednej procedurze przechowywanej może wywołać inną.Poziom zagnieżdżenia jest zwiększana podczas uruchamiania procedury o nazwie działa i zmniejszona po zakończeniu wykonywania procedury o nazwie.Procedury przechowywane mogą być zagnieżdżane maksymalnie 32 poziomy.Aby uzyskać więcej informacji zobaczNesting Stored Procedures.

Aby oszacować rozmiar skompilowany procedura przechowywana, należy użyć następujących liczników Monitora wydajności.

Nazwa obiektu Monitora wydajności

Nazwy liczników Monitora wydajności

SQLServer: Planowane jest pamięć podręczna obiektów

Współczynnik odwołań do pamięci podręcznej

 

Pamięć podręczna strony

 

Liczniki pamięci podręcznej obiektów *

* Te liczniki są dostępne dla różnych kategorii obiektów pamięci podręcznej, w tym także sql ad hoc, przygotowane sql, procedurami, wyzwalaczami i tak dalej.

Aby uzyskać więcej informacji zobaczSQL Server, Plan Cache Object.

<sql_statement> Ograniczenia

Wewnątrz procedura przechowywana, z wyjątkiem zestaw SHOWPLAN_TEXT i zestaw SHOWPLAN_ALL można określać żadnych instrukcja zestaw.Muszą to być tylko instrukcje w tej instancji.zestaw opcje wybrane na obowiązuje podczas wykonywania procedura przechowywana, a następnie powróci do jego poprzedniego ustawienia.

Wewnątrz procedura przechowywana nazwy obiektu, stosowane do wszystkich instrukcji definicja danych Language (DDL), takie jak CREATE, ALTER, lub DROP instrukcji, DBCC instrukcji, wykonać i dynamicznych instrukcji SQL musi być kwalifikowany o nazwie schematu obiektów użytkowników innych niż właściciel procedura przechowywana w przypadku używania procedura przechowywana.Aby uzyskać więcej informacji zobaczDesigning Stored Procedures (Database Engine).

Uprawnienia

Wymaga CREATE PROCEDURE w bazie danych i ALTER uprawnienie dla schematu, w którym tworzony jest procedurą.

Procedury przechowywane CLR wymaga własność wirtualny plik dziennika, do którego odwołuje się <method_specifier>, lub materiały referencyjne uprawnienie do tego wirtualny plik dziennika.

Przykłady

A.Za pomocą prostego procedury

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

The uspGetEmployees procedura przechowywana can be executed in the following 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 nazw, które zaczynają się od litery D).

The uspGetEmployees2 procedura przechowywana can be executed in many combinations. Tylko kilka kombinacji zostały przedstawione poniżej:

D.Zwraca więcej niż jeden wynik zestaw

Poniższa procedura przechowywana zwraca dwa zestawy wyników.

USE AdventureWorks;
GO
CREATE PROCEDURE uspNResults 
AS
SELECT COUNT(ContactID) FROM Person.Contact
SELECT COUNT(CustomerID) FROM Sales.Customer;
GO

E.Korzystanie z parametrów wyjście

Poniższy przykład tworzy uspGetList Procedura przechowywana. Tej procedury zwraca listę produktów, których ceny, które nie przekraczają określonej wartości.W przykładzie przy użyciu wielu SELECT instrukcje i wielokrotne OUTPUT Parametry. Parametry wyjście włączyć procedurę zewnętrznych, zadanie partia lub więcej niż jeden Transact-SQL instrukcję, aby uzyskać dostęp do wartości ustawionej w czasie wykonywania procedury.

wykonać uspGetList Aby uzyskać listę Adventure Works produkty (Rowery), które kosztu niż $700. The OUTPUT parameters @Cost and @ComparePrices are used with język sterowania przepływem to return a message in the Messages window.

Uwaga

Wyjście zmiennej musi być zdefiniowana, podczas tworzenia tej procedury, a także kiedy używana jest zmienna.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.

F.Za pomocą opcji WITH RECOMPILE

The WITH RECOMPILE klauzula is helpful when the parameters supplied to the procedure will not be typical, and when a new execution plan should not be cached or stored in memory.

G.Za pomocą opcji WITH szyfrowanie

Poniższy przykład tworzy HumanResources.uspEncryptThis Procedura przechowywana.

The WITH ENCRYPTION option prevents the definition of the procedura przechowywana from being returned, as shown by the following examples.

Uruchamianie sp_helptext:

EXEC sp_helptext 'HumanResources.uspEncryptThis';

Here is the result set.

The text for object 'HumanResources.uspEncryptThis' is encrypted.

Kwerendy bezpośrednio sys.sql_modules Widok wykazu:

USE AdventureWorks;
GO
SELECT definition FROM sys.sql_modules
WHERE object_id = OBJECT_ID('HumanResources.uspEncryptThis');

Here is the result set.

definition
----------------------
NULL

(1 row(s) affected)

H.Za pomocą rozpoznawania nazw odroczenia

Poniższy przykład tworzy uspProc1 procedura. Korzysta z rozpoznawania nazw odłożone.Procedura przechowywana jest tworzony, mimo że czas kompilacji nie tabela, do którego odwołuje się.Jednak musi istnieć w tabela, po wykonaniu tej procedury.

Aby zweryfikować, że procedura przechowywana została utworzona, uruchom następującą kwerendę:

Here is the result set.

definition
-----------------------------------------------------------------------
CREATE PROCEDURE uspproc1
AS
    SELECT column1, column2 FROM table_does_not_exist

(1 row(s) affected)

I.Za pomocą wykonać AS klauzula

W poniższym przykładzie pokazano, za pomocą WYKONANIE JAKO klauzula określić kontekst zabezpieczeń, w którym można wykonać procedura przechowywana.W przykładzie, opcja CALLER Określa, że procedury mogą być wykonywane w kontekście użytkownika, który je wywołuje.

J.Tworzenie CLR procedura przechowywana

Poniższy przykład tworzy GetPhotoFromDB przechowywana procedura, która odwołuje się GetPhotoFromDB Metoda LargeObjectBinary Klasa w HandlingLOBUsingCLR wirtualny plik dziennika. Przed utworzeniem procedura przechowywana HandlingLOBUsingCLR wirtualny plik dziennika jest zarejestrowany w lokalnej bazie danych.

CREATE ASSEMBLY HandlingLOBUsingCLR
FROM '\\MachineName\HandlingLOBUsingCLR\bin\Debug\HandlingLOBUsingCLR.dll';
GO
CREATE PROCEDURE dbo.GetPhotoFromDB
(
    @ProductPhotoID int,
    @CurrentDirectory nvarchar(1024),
    @FileName nvarchar(1024)
)
AS EXTERNAL NAME HandlingLOBUsingCLR.LargeObjectBinary.GetPhotoFromDB;
GO

Wiersze mogą być tak szerokie, czasami dany operator nie może przetworzyć w wierszu.Za pomocą parametru WYJŚCIOWEGO kursor

Wyjście kursor parametry są używane do przekazania kursora, która jest lokalnym procedurę przechowywaną do wywoływania partia, procedura przechowywana lub wyzwalacza.

Najpierw należy utworzyć procedury, która deklaruje, a następnie otworzy kursor na Currency Tabela:

Następnie należy uruchomić partia, który deklaruje zmienną kursora lokalnego, wykonuje procedurę przypisywania kursor do zmiennej lokalnej, a następnie pobiera wierszy z kursora.

See Also

Reference

Other Resources