Sdílet prostřednictvím


ALTERŮV ZÁKROK (Transact-SQL)

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLAzure Synapse AnalyticsAnalytics Platform System (PDW)Koncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabá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)