Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Upravuje dříve vytvořenou proceduru, která byla vytvořena vykonáním příkazu CREATE PROCEDURE v SQL Serveru.
Transact-SQL Syntaxové konvence (Transact-SQL)
Syntaxe
-- 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
Název schématu, do kterého procedura patří.
procedure_name
Název postupu ke změně. Názvy procedur musí splňovat pravidla pro identifikátory .
;číslo
Existující volitelné celé číslo, které slouží k seskupování procedur stejného jména, aby je bylo možné spojit pomocí jednoho příkazu DROP PROCEDURE.
Poznámka:
Tato funkce bude odebrána v budoucí verzi SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají.
@
parameter_name
Parametr v postupu. Lze specifikovat až 2 100 parametrů.
[ type_schema_name. ] data_type
Je datový typ parametru a schématu, ke kterému patří.
Pro informace o omezeních typů dat viz CREATE PROCEDURE (Transact-SQL).
PROMĚNNÝ
Určuje sadu výsledků podporovanou jako výstupní parametr. Tento parametr je dynamicky konstruován uloženou procedurou a jeho obsah se může lišit. Platí to pouze pro parametry kurzoru. Tato možnost není platná pro CLR procedury.
default
je výchozí hodnota parametru.
OUT | VÝSTUP
Označuje, že parametr je návratový parametr.
JEN PRO ČTENÍ
Označuje, že parametr nelze aktualizovat ani měnit v těle procedury. Pokud je typ parametru typ hodnoty tabulky, musí být zadán readONLY.
RECOMPILE
Označuje, že databázový engine neukládá plán pro tento postup a procedura je za běhu znovu zkompilována.
ŠIFROVÁNÍ
Platí na: SQL Server (SQL Server 2008 (10.0.x) a novější) a Azure SQL Database.
Označuje, že databázový engine převede původní text příkazu ALTER PROCEDURE do obfuskovaného formátu. Výstup obfuskace není přímo viditelný v žádném z katalogových zobrazení v SQL Serveru. Uživatelé, kteří nemají přístup k tabulkám systému nebo databázovým souborům, nemohou zamlžený text získat. Text však bude dostupný privilegovaným uživatelům, kteří mohou buď přistupovat k tabulkám systémů přes port DAC, nebo přímo přistupovat k databázovým souborům. Uživatelé, kteří mohou připojit ladicí nástroj k serverovému procesu, mohou původní proceduru z paměti získat za běhu. Další informace o přístupu k systémovým metadatům naleznete v tématu Konfigurace viditelnosti metadat.
Procedury vytvořené touto možností nelze publikovat jako součást replikace SQL Serveru.
Tato možnost nemůže být specifikována pro uložené procedury v běžném jazyce (CLR).
Poznámka:
Během upgradu databázový engine využívá obfuskované komentáře uložené v sys.sql_modules k obnovení procedur.
VYKONAT JAKO
Specifikuje bezpečnostní kontext, ve kterém má uložená procedura po jejím přístupu vykonat.
Další informace naleznete v tématu EXECUTE AS – klauzule (Transact-SQL).
PRO REPLIKACI
Specifikuje, že uložené procedury vytvořené pro replikaci nelze spustit na předplatitele. Uložená procedura vytvořená s možností FOR REPLICATION se používá jako filtr uložených procedur a vykonává se pouze během replikace. Parametry nelze deklarovat, pokud je specifikováno FOR REPLICATION. Tato možnost není platná pro CLR procedury. Možnost REKOMPIL je ignorována pro procedury vytvořené s funkcí FOR REPLICATION.
Poznámka:
Tato možnost není dostupná v uzavřené databázi.
{ [ BEGIN ] sql_statement [;] [ ... n ] [ END ] }
Jeden nebo více Transact-SQL příkazů, které tvoří tělo procedury. K uzavření příkazů můžete použít volitelná klíčová slova BEGIN a END. Pro více informací viz sekce Nejlepší postupy, Obecné poznámky a Omezení a omezení v postupu CREATE (Transact-SQL).
EXTERNÍ NÁZEV assembly_name.class_name.method_name
platí pro: SQL Server 2008 (10.0.x) a novější.
Specifikuje metodu .NET Framework assembleru pro uloženou proceduru CLR k odkazování. class_name musí být platný identifikátor SQL Serveru a musí existovat jako třída v sestavení. Pokud má třída jméno kvalifikované pro jmenný prostor a používá tečku (.) pro oddělení částí jmenného prostoru, musí být název třídy vymezen pomocí závorek ([]) nebo uvozovek ("""). Zadaná metoda musí být statickou metodou třídy.
SQL Server ve výchozím nastavení nemůže spouštět CLR kód. Můžete vytvářet, upravovat a odstraňovat databázové objekty, které odkazují na běžné moduly v běžném jazyce; tyto reference však nelze v SQL Serveru spustit, dokud nepovolíte možnost CLR povolené. Pokud chcete tuto možnost povolit, použijte sp_configure.
Poznámka:
Procedury CLR nejsou podporovány v obsažené databázi.
Obecné poznámky
Transact-SQL uložené procedury nelze měnit na CLR uložené procedury a naopak.
ALTER PROCEDURE nemění oprávnění a neovlivňuje žádné závislé uložené procedury ani spouštěče. Současná nastavení relace pro QUOTED_IDENTIFIER a ANSI_NULLS jsou však zahrnuta v uložené procedurě při její změně. Pokud jsou nastavení odlišná od těch, která platila při původním vytvoření uložené procedury, může se chování uložené procedury změnit.
Pokud byla předchozí definice procedury vytvořena pomocí WITH ENCRYPTION nebo WITH RECOMPILE, tyto možnosti jsou povoleny pouze tehdy, pokud jsou zahrnuty v ALTER PROCEDURE.
Pro více informací o uložených procedurách viz CREATE PROCEDURE (Transact-SQL).
Zabezpečení
Povolení
Vyžaduje povolení ALTERu k procedurě nebo vyžaduje členství v db_ddladmin pevné databázové roli.
Examples
Následující příklad vytváří uloženou proceduru uspVendorAllInfo . Tento proces vrací jména všech dodavatelů, kteří Adventure Works Cycles dodávají – produkty, které nabízejí, jejich kreditní skóre a dostupnost. Po vytvoření tohoto postupu je následně upraven tak, aby vracel jinou množinu výsledků.
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
Následující příklad mění uložený uspVendorAllInfo postup. Odstraní klauzuli EXECUTE AS CALLER a upraví tělo procedury tak, aby vracela pouze ty dodavatele, kteří dodávají specifikovaný produkt. Funkce LEFT a CASE přizpůsobí vzhled sady výsledků.
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
Tady je soubor výsledků.
Vendor Product name Rating Availability
-------------------- ------------- ------- ------------
Proseware, Inc. LL Crankarm Average No
Vision Cycles, Inc. LL Crankarm Superior Yes
(2 row(s) affected)`
Viz také
CREATE PROCEDURE (Transact-SQL)
DROP PROCEDURE (Transact-SQL)
EXECUTE (Transact-SQL)
VYKONAT AS (Transact-SQL)
EVENTDATA (Transact-SQL)
Uložené procedury (databázový stroj)
sys.procedures (Transact-SQL)