Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Punkt końcowy analizy SQL w usłudze Microsoft Fabric
Hurtownia danych w usłudze Microsoft Fabric
Baza danych SQL w usłudze Microsoft Fabric
Modyfikuje wcześniej utworzoną procedurę, która została utworzona przez wykonanie instrukcji CREATE PROCEDURE w SQL Serverze.
Transact-SQL Konwencje składniowe (Transact-SQL)
Składnia
-- Syntax for SQL Server and Azure SQL Database
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter_name [ type_schema_name. ] data_type }
[ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH <procedure_option> [ ,...n ] ]
[ FOR REPLICATION ]
AS { [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
[;]
<procedure_option> ::=
[ ENCRYPTION ]
[ RECOMPILE ]
[ EXECUTE AS Clause ]
-- Syntax for SQL Server CLR Stored Procedure
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ]
[ { @parameter_name [ type_schema_name. ] data_type }
[ = default ] [ OUT | OUTPUT ] [READONLY]
] [ ,...n ]
[ WITH EXECUTE AS Clause ]
AS { EXTERNAL NAME assembly_name.class_name.method_name }
[;]
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name
[ { @parameterdata_type } [= ] ] [ ,...n ]
AS { [ BEGIN ] sql_statement [ ; ] [ ,...n ] [ END ] }
[;]
Arguments
schema_name
Nazwa schematu, do którego należy procedura.
procedure_name
Nazwa procedury zmiany procedury. Nazwy procedur muszą być zgodne z regułami dotyczącymi identyfikatorów .
;numer
Istniejąca opcjonalna liczba całkowita używana do grupowania procedur o tej samej nazwie, tak aby można je było ułożyć razem za pomocą jednej instrukcji DROP PROCEDURE.
Uwaga / Notatka
Ta funkcja zostanie usunięta w przyszłej wersji programu SQL Server. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji.
@
parameter_name
Parametr w procedurze. Można określić do 2 100 parametrów.
[ type_schema_name. ] data_type
Jest typem danych parametru oraz schematem, do którego należy.
Aby uzyskać informacje o ograniczeniach typów danych, zobacz procedurę CREATE (Transact-SQL).
RÓŻNYCH
Określa zestaw wyników obsługiwany jako parametr wyjściowy. Ten parametr jest dynamicznie konstruowany przez procedurę przechowywaną, a jego zawartość może się zmieniać. Dotyczy tylko parametrów kursora. Ta opcja nie jest ważna dla procedur CLR.
domyślne
Jest domyślną wartością parametru.
OUT | WYJŚCIE
Wskazuje, że parametr jest parametrem zwrotnym.
READONLY
Oznacza, że parametr nie może być aktualizowany ani modyfikowany w treści procedury. Jeśli typ parametru jest typem wartości tabeli, należy określić wartość READONLY.
RECOMPILE
Wskazuje, że silnik bazy danych nie buforuje planu dla tej procedury i procedura jest ponownie kompilowana w czasie działania.
SZYFROWANIE
Dotyczy do: SQL Server (SQL Server 2008 (10.0.x) i nowszy) oraz Azure SQL Database.
Wskazuje, że silnik bazy danych przekonwertuje oryginalny tekst instrukcji ALTER PROCEDURE na format zaciemniony. Wyjście z zaciemniania nie jest bezpośrednio widoczne w żadnym z widoków katalogowych w SQL Serverze. Użytkownicy, którzy nie mają dostępu do tabel systemowych ani plików baz danych, nie mogą odzyskać zaciemnionego tekstu. Jednak tekst będzie dostępny dla uprzywilejowanych użytkowników, którzy mogą uzyskać dostęp do tabel systemowych przez port DAC lub bezpośrednio do plików bazy danych. Ponadto użytkownicy, którzy mogą dołączyć debugger do procesu serwera, mogą pobierać oryginalną procedurę z pamięci podczas działania. Aby uzyskać więcej informacji na temat uzyskiwania dostępu do metadanych systemu, zobacz Konfiguracja widoczności metadanych.
Procedury utworzone tą opcją nie mogą być publikowane jako część replikacji SQL Server.
Ta opcja nie może być określona dla procedur przechowywanych w języku common running time (CLR).
Uwaga / Notatka
Podczas aktualizacji silnik bazy danych wykorzystuje zaciemnione komentarze zapisane w sys.sql_modules do ponownego tworzenia procedur.
WYKONAJ JAKO
Określa kontekst bezpieczeństwa, w którym należy wykonać procedurę przechowywaną po jej uzyskaniu dostępu.
Aby uzyskać więcej informacji, zobacz EXECUTE AS Clause (Transact-SQL).
REPLIKACJA
Określa, że procedury przechowywane utworzone do replikacji nie mogą być wykonywane na subskrybentze. Procedura przechowywana utworzona z opcją FOR REPLICATION jest używana jako filtr procedur przechowywanych i wykonywana tylko podczas replikacji. Parametrów nie można zadeklarować, jeśli określono FOR REPLICATION. Ta opcja nie jest ważna dla procedur CLR. Opcja RECOMPILE jest ignorowana dla procedur utworzonych za pomocą funkcji REPLIKACJA.
Uwaga / Notatka
Ta opcja nie jest dostępna w zamkniętej bazie danych.
{ [ BEGIN ] sql_statement [;] [ ... n ] [ END ] }
Co najmniej jedno Transact-SQL instrukcje składające się z treści procedury. Możesz użyć opcjonalnych słów kluczowych BEGIN i END, aby ująć instrukcje. Więcej informacji można znaleźć w sekcjach Najlepsze praktyki, Uwagi ogólne oraz Ograniczenia i Ograniczenia w procedurze CREATE (Transact-SQL).
NAZWA ZEWNĘTRZNA assembly_name.class_name.method_name
Dotyczy: SQL Server 2008 (10.0.x) i nowszych.
Określa metodę asembla .NET Framework dla procedury przechowywanej CLR do odwołania. class_name musi być prawidłowym identyfikatorem programu SQL Server i musi istnieć jako klasa w zestawie. Jeśli klasa ma nazwę kwalifikowaną do przestrzeni nazw, używa kropki (.) do oddzielenia części przestrzeni nazw, nazwa klasy musi być wydzielona nawiasem ([]) lub cudzysłowem ("""). Określona metoda musi być statyczną metodą klasy.
Domyślnie SQL Server nie może wykonywać kodu CLR. Możesz tworzyć, modyfikować i usuwać obiekty bazy danych, które odwołują się do modułów uruchomieniowych w języku wspólnym; jednak nie możesz wykonać tych referencji w SQL Server, dopóki nie włączysz opcji włączonej CLR. Aby włączyć tę opcję, użyj sp_configure.
Uwaga / Notatka
Procedury CLR nie są obsługiwane w zawartej bazie danych.
Uwagi ogólne
Transact-SQL Procedury składowane nie można modyfikować na procedury składowane CLR i odwrotnie.
ALTER PROCEDURA nie zmienia uprawnień i nie wpływa na żadne zależne procedury przechowywane ani wyzwalacze. Jednak aktualne ustawienia sesji dla QUOTED_IDENTIFIER i ANSI_NULLS są uwzględniane w procedurze przechowywanej po jej modyfikacji. Jeśli ustawienia różnią się od tych obowiązujących przy pierwotnym tworzeniu procedury przechowywanej, zachowanie procedury przechowywanej może ulec zmianie.
Jeśli poprzednia definicja procedury została utworzona za pomocą WITH ENCRYPTION lub WITH RECOMPILE, te opcje są włączane tylko wtedy, gdy są zawarte w procedurze ALTER.
Aby uzyskać więcej informacji o procedurach przechowywanych, zobacz CREATE PROCEDURE (Transact-SQL).
Zabezpieczenia
Permissions
Wymaga zgody ALTER na procedurę lub wymaga członkostwa w roli db_ddladmin stałej bazy danych.
Przykłady
Poniższy przykład tworzy procedurę uspVendorAllInfo przechowywaną. Proces ten zwraca nazwy wszystkich dostawców dostarczających Adventure Works Cycles, produkty, które dostarczają, ich zdolność kredytową oraz dostępność. Po utworzeniu tej procedury jest ona modyfikowana, aby zwracać inny zbiór wyników.
IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL
DROP PROCEDURE Purchasing.uspVendorAllInfo;
GO
CREATE PROCEDURE Purchasing.uspVendorAllInfo
WITH EXECUTE AS CALLER
AS
SET NOCOUNT ON;
SELECT v.Name AS Vendor, p.Name AS 'Product name',
v.CreditRating AS 'Rating',
v.ActiveFlag AS Availability
FROM Purchasing.Vendor v
INNER JOIN Purchasing.ProductVendor pv
ON v.BusinessEntityID = pv.BusinessEntityID
INNER JOIN Production.Product p
ON pv.ProductID = p.ProductID
ORDER BY v.Name ASC;
GO
Poniższy przykład zmienia procedurę przechowywaną uspVendorAllInfo . Usuwa klauzulę EXECUTE AS CALLER i modyfikuje treść procedury, aby zwracać tylko tych dostawców dostarczających określony produkt. Funkcje LEFT i CASE dostosują wygląd zestawu wyników.
USE AdventureWorks2022;
GO
ALTER PROCEDURE Purchasing.uspVendorAllInfo
@Product VARCHAR(25)
AS
SET NOCOUNT ON;
SELECT LEFT(v.Name, 25) AS Vendor, LEFT(p.Name, 25) AS 'Product name',
'Rating' = CASE v.CreditRating
WHEN 1 THEN 'Superior'
WHEN 2 THEN 'Excellent'
WHEN 3 THEN 'Above average'
WHEN 4 THEN 'Average'
WHEN 5 THEN 'Below average'
ELSE 'No rating'
END
, Availability = CASE v.ActiveFlag
WHEN 1 THEN 'Yes'
ELSE 'No'
END
FROM Purchasing.Vendor AS v
INNER JOIN Purchasing.ProductVendor AS pv
ON v.BusinessEntityID = pv.BusinessEntityID
INNER JOIN Production.Product AS p
ON pv.ProductID = p.ProductID
WHERE p.Name LIKE @Product
ORDER BY v.Name ASC;
GO
Oto zestaw wyników.
Vendor Product name Rating Availability
-------------------- ------------- ------- ------------
Proseware, Inc. LL Crankarm Average No
Vision Cycles, Inc. LL Crankarm Superior Yes
(2 row(s) affected)`
Zobacz też
UTWÓRZ PROCEDURĘ (Transact-SQL)
DROP PROCEDURE (Transact-SQL)
WYKONAJ (Transact-SQL)
WYKONAJ AS (Transact-SQL)
DANE ZDARZEŃ (Transact-SQL)
Procedury składowane (aparatu bazy danych)
sys.procedures (Transact-SQL)