ALTER PROCEDURE (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Módosítja egy korábban létrehozott eljárást, amelyet az CREATE PROCEDURE utasítás végrehajtásával hoztak létre az SQL Server-ben.

Transact-SQL Szintaxiskonvenciók (Transact-SQL)

Szemantika

-- 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
Annak a sémának a neve, amelyhez az eljárás tartozik.

procedure_name
A változtatandó eljárás neve. Az eljárásneveknek meg kell felelniük az azonosítókszabályainak.

;szám
Egy meglévő opcionális egész szám, amelyet azonos nevű eljárások csoportosítására használnak, hogy egyetlen DROP PROCEDURE állítással össze tudják őket adni.

Megjegyzés:

Ez a funkció az SQL Server egy későbbi verziójában lesz eltávolítva. Ne használja ezt a funkciót az új fejlesztési munkában, és tervezze meg a funkciót jelenleg használó alkalmazások módosítását.

@ parameter_name
Egy paraméter az eljárásban. Legfeljebb 2100 paraméter meghatározható.

[ type_schema_name. ] data_type
A paraméter adattípusa és az a séma, amelyhez tartozik.

Az adattípus-korlátozásokról további információkért lásd CREATE PROCEDURE (Transact-SQL).

VÁLTAKOZÓ
A kimeneti paraméterként támogatott eredményhalmazt adja meg. Ezt a paramétert dinamikusan építik fel a tárolt eljárás, és tartalma változó lehet. Csak kurzor paraméterekre vonatkozik. Ez az opció nem érvényes CLR eljárásokra.

alapértelmezett
Ez a paraméter alapértelmezett értéke.

KI | HOZAM
Jelzi, hogy a paraméter egy visszaadó paraméter.

ÍRÁSVÉDETT
Jelzi, hogy a paraméter nem frissíthető vagy módosítható az eljárás törzsén belül. Ha a paramétertípus tábla-érték típusú, akkor a READONLY értéket kell megadni.

RECOMPILE
Azt jelzi, hogy az Adatbázis Motor nem gyorsít el tervet erre az eljárásra, és az eljárást futás közben újrafordítják.

TITKOSÍTÁS
Alkalmazható: SQL Server (SQL Server 2008 (10.0.x) és újabbabb) és Azure SQL Database.

Azt jelzi, hogy a Database Engine az eredeti szöveget elhomályosított formátumra konvertáljaALTER PROCEDURE. Az elrejtés kimenete közvetlenül nem látható egyetlen katalógusnézetben sem az SQL Serverben. Azok a felhasználók, akiknek nincs hozzáférésük rendszertáblákhoz vagy adatbázis-fájlokhoz, nem tudják visszaszerezni az elrejtett szöveget. Azonban a szöveg elérhető lesz a kiváltságos felhasználók számára, akik vagy a DAC porton keresztül hozzáférhetnek a rendszertáblákhoz, vagy közvetlenül az adatbázis fájlokhoz. Emellett azok a felhasználók, akik debuggert csatlakoztathatnak a szerver folyamatához, futásidőben visszaszerezhetik az eredeti eljárást a memóriából. A rendszer metaadatainak eléréséről további információt a Metaadatok láthatósági konfigurációja című témakörben talál.

Ezzel a lehetőséggel létrehozott eljárások nem publikálhatók az SQL Server replikáció részeként.

Ez az opció nem lehet megadni a közös nyelvi futási idejű (CLR) tárolt eljárásokhoz.

Megjegyzés:

Frissítés során az Adatbázis Motor a sys.sql_modules rejtett kommentjeit használja az eljárások újralétrehozásához.

EXECUTE AS
Megadja azt a biztonsági kontextust, amelyben a tárolt eljárást a hozzáférés után kell végrehajtani.

További információ: EXECUTE AS Záradék (Transact-SQL).

REPLIKÁCIÓHOZ

Megadja, hogy a replikációra létrehozott tárolt eljárások nem futtathatók az Előfizetőn. Az FOR REPLICATION opcióval létrehozott tárolt eljárást tárolt eljárásszűrőként használják, és csak replikáció közben hajtják végre. Paraméterek nem jelenthetők meg, ha a FOR REPLICATION meg van jelölve. Ez az opció nem érvényes CLR eljárásokra. A FOR REPLICATION szolgáltatással létrehozott eljárások esetében a RENDSZER figyelmen kívül hagyja a RECOMPILE beállítást.

Megjegyzés:

Ez az opció nem érhető el egy zárt adatbázisban.

{ [ BEGIN ] sql_statement [;] [ ... n ] [ END ] }
Egy vagy több Transact-SQL utasítás, amely az eljárás törzsét tartalmazza. Az opcionális BEGIN és END kulcsszavak használatával csatolhatja az utasításokat. További információért lásd a Legjobb gyakorlatok, Általános megjegyzések, valamint Korlátozások és Korlátozások ( CREATE PROCEDURETransact-SQL) szakaszokban.

KÜLSŐ NÉV assembly_name.class_name.method_name
Az: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.

Megadja egy .NET Framework assembly módszerét egy CLR tárolt eljáráshoz, amelyre hivatkozhat. class_name érvényes SQL Server-azonosítónak kell lennie, és osztályként kell léteznie a szerelvényben. Ha az osztály névtérhez minősített neve egy pontot (.) használ a névtér részeinek elkülönítésére, akkor az osztálynevet zárójelekkel ([]) vagy idézőjelekkel ("") kell szegélybe tenni. A megadott metódusnak az osztály statikus metódusának kell lennie.

Alapértelmezés szerint az SQL Server nem tud CLR kódot futtatni. Létrehozhatsz, módosíthatod és eldobhatod adatbázis-objektumokat, amelyek a közös nyelvi futási modulokra hivatkoznak; azonban ezeket a hivatkozásokat nem futtathatod SQL Serverben, amíg nem engedélyezed a CLR engedélyezett opciót. A beállítás engedélyezéséhez használja a sp_configure.

Megjegyzés:

A CLR-eljárások nem támogatottak a tárolt adatbázisokban.

Általános megjegyzések

Transact-SQL tárolt eljárások nem módosíthatók CLR-tárolt eljárásokként, és fordítva.

ALTER PROCEDURE nem változtatja meg a jogosultságokat, és nem érinti a függő tárolt eljárásokat vagy triggereket. Azonban a jelenlegi és a játékmenet beállításai QUOTED_IDENTIFIERANSI_NULLS a tárolt eljárásban vannak beépítve, amikor módosítják. Ha a beállítások eltérnek attól, amit eredetileg aktiváltak, a tárolt eljárás viselkedése változhat.

Ha egy korábbi eljárásdefiníciót TITKOSÍTÁSSAL vagy ÚJRAFORDÍTVA, ezek az opciók csak akkor engedélyezettek, ha benne vannak .ALTER PROCEDURE

További információért a tárolt eljárásokról lásd CREATE PROCEDURE (Transact-SQL)

Biztonság

Permissions

Megköveteli az ALTER engedélyt az eljárásra, vagy tagságot kell db_ddladmin rögzített adatbázis szerepében.

Példák

A következő példa hozza létre a tárolt uspVendorAllInfo eljárást. Ez a folyamat visszaadja az összes Adventure Works Cycle-t szállító szolgáltató nevét, az általuk szállított termékeket, hitelminősítésüket és elérhetőségüket. Miután ez az eljárás létrejött, módosítják, hogy egy másik eredményhalmazt adjon vissza.

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    

A következő példa megváltoztatja a tárolt uspVendorAllInfo eljárást. Eltávolítja a EXECUTE AS CALLER záradékot, és módosítja a eljárás törzsét, hogy csak azokat a gyártókat adja vissza, akik a megadott terméket szállítják. A LEFT és CASE függvények testre szabják az eredményhalmaz megjelenését.

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  

Itt van az eredmények összessége.

Vendor               Product name  Rating    Availability  
-------------------- ------------- -------   ------------  
Proseware, Inc.      LL Crankarm   Average   No  
Vision Cycles, Inc.  LL Crankarm   Superior  Yes  
(2 row(s) affected)`  

Lásd még:

CREATE PROCEDURE (Transact-SQL)
DROP PROCEDURE (Transact-SQL)
VÉGREHAJTSA (Transact-SQL)
EXECUTE AS (Transact-SQL)
ESEMÉNYADATOK (Transact-SQL)
tárolt eljárások (adatbázismotor)
Rendszerrendszeri eljárások (Transact-SQL)