ALTER PROCEDURE (Transact-SQL)ALTER PROCEDURE (Transact-SQL)

QUESTO ARGOMENTO SI APPLICA A: SìSQL Server (a partire da 2008)SìDatabase SQL di AzureSìAzure SQL Data Warehouse Sì Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Viene modificata una procedura creata in precedenza tramite l'istruzione CREATE PROCEDURE in SQL ServerSQL Server.Modifies a previously created procedure that was created by executing the CREATE PROCEDURE statement in SQL ServerSQL Server.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL (Transact-SQL)Topic link icon Transact-SQL Syntax Conventions (Transact-SQL)

SintassiSyntax

-- Syntax for SQL Server and Azure SQL Database

ALTER { 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 { [ 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 [ 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 SQL Data Warehouse and Parallel Data Warehouse  

ALTER { PROC | PROCEDURE } [schema_name.] procedure_name  
    [ { @parameterdata_type } [= ] ] [ ,...n ]  
AS { [ BEGIN ] sql_statement [ ; ] [ ,...n ] [ END ] }  
[;]  

ArgomentiArguments

schema_nameschema_name
Nome dello schema a cui appartiene la procedura.The name of the schema to which the procedure belongs.

procedure_nameprocedure_name
Nome della procedura da modificare.The name of the procedure to change. I nomi delle procedure devono essere conformi alle regole per gli identificatori.Procedure names must comply with the rules for identifiers.

; number; number
Integer facoltativo esistente usato per raggruppare procedure con lo stesso nome in modo da poter rimuoverle tramite un'unica istruzione DROP PROCEDURE.An existing optional integer that is used to group procedures of the same name so that they can be dropped together by using one DROP PROCEDURE statement.

Nota

Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

@ parameter@ parameter
Parametro della procedura.A parameter in the procedure. È possibile specificare un massimo di 2.100 parametri.Up to 2,100 parameters can be specified.

[ type_schema_name. ] data_type[ type_schema_name. ] data_type
Tipo di dati del parametro e schema a cui appartiene.Is the data type of the parameter and the schema it belongs to.

Per informazioni sulle restrizioni dei tipi di dati, vedere CREATE PROCEDURE (Transact-SQL).For information about data type restrictions, see CREATE PROCEDURE (Transact-SQL).

VARYINGVARYING
Specifica il set di risultati supportato come parametro di output.Specifies the result set supported as an output parameter. Questo parametro viene creato in modo dinamico dalla stored procedure e il relativo contenuto può variare.This parameter is constructed dynamically by the stored procedure and its contents can vary. Viene usato solo con parametri di cursore.Applies only to cursor parameters. Questa opzione non è valida per le procedure CLR.This option is not valid for CLR procedures.

defaultdefault
Valore predefinito del parametro.Is a default value for the parameter.

OUT | OUTPUTOUT | OUTPUT
Indica che si tratta di un parametro restituito.Indicates that the parameter is a return parameter.

READONLYREADONLY
Indica che il parametro non può essere aggiornato o modificato all'interno del corpo della procedura.Indicates that the parameter cannot be updated or modified within the body of the procedure. Se si tratta di un tipo di parametro con valori di tabella, è necessario specificare la parola chiave READONLY.If the parameter type is a table-value type, READONLY must be specified.

RECOMPILERECOMPILE
Indica che il Motore di databaseDatabase Engine non memorizza nella cache un piano per la procedura e che la procedura viene ricompilata in fase di esecuzione.Indicates that the Motore di databaseDatabase Engine does not cache a plan for this procedure and the procedure is recompiled at run time.

ENCRYPTIONENCRYPTION
Si applica a: SQL Server (da SQL Server 2008SQL Server 2008 a SQL Server 2017SQL Server 2017) e Database SQL di AzureAzure SQL Database.Applies to: SQL Server ( SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017) and Database SQL di AzureAzure SQL Database.

Indica che il testo originale dell'istruzione ALTER PROCEDURE verrà convertito dal Motore di databaseDatabase Engine in un formato offuscato.Indicates that the Motore di databaseDatabase Engine will convert the original text of the ALTER PROCEDURE statement to an obfuscated format. L'output dell'offuscamento non è visibile direttamente nelle viste del catalogo in SQL ServerSQL Server.The output of the obfuscation is not directly visible in any of the catalog views in SQL ServerSQL Server. Gli utenti che non hanno accesso a tabelle di sistema o file del database non possono recuperare il testo offuscato.Users that have no access to system tables or database files cannot retrieve the obfuscated text. Il testo è tuttavia disponibile per gli utenti con privilegi che consentono l'accesso alle tabelle di sistema attraverso la porta DAC o l'accesso diretto a file del database.However, the text will be available to privileged users that can either access system tables over the DAC port or directly access database files. Gli utenti in grado di collegare un debugger al processo del server possono inoltre recuperare la procedura originale dalla memoria in fase di esecuzione.Also, users that can attach a debugger to the server process can retrieve the original procedure from memory at runtime. Per altre informazioni sull'accesso ai metadati di sistema, vedere Configurazione della visibilità dei metadati.For more information about accessing system metadata, see Metadata Visibility Configuration.

Le procedure create con questa opzione non possono essere pubblicate durante la replica di SQL ServerSQL Server.Procedures created with this option cannot be published as part of SQL ServerSQL Server replication.

Questa opzione non può essere specificata per stored procedure CLR (Common Language Runtime).This option cannot be specified for common language runtime (CLR) stored procedures.

Nota

Durante un aggiornamento Motore di databaseDatabase Engine usa i commenti offuscati archiviati in sys.sql_modules per ricreare procedure.During an upgrade, the Motore di databaseDatabase Engine uses the obfuscated comments stored in sys.sql_modules to re-create procedures.

EXECUTE ASEXECUTE AS
Specifica il contesto di sicurezza in cui deve essere eseguita la stored procedure dopo l'accesso.Specifies the security context under which to execute the stored procedure after it is accessed.

Per altre informazioni, vedere Clausola EXECUTE AS (Transact-SQL).For more information, see EXECUTE AS Clause (Transact-SQL).

FOR REPLICATIONFOR REPLICATION

Specifica che le stored procedure create per la replica non possono essere eseguite nel Sottoscrittore.Specifies that stored procedures that are created for replication cannot be executed on the Subscriber. Una stored procedure creata con l'opzione FOR REPLICATION viene usata come filtro di stored procedure ed eseguita solo durante la replica.A stored procedure created with the FOR REPLICATION option is used as a stored procedure filter and only executed during replication. Se viene specificata l'opzione FOR REPLICATION, non è possibile dichiarare alcun parametro.Parameters cannot be declared if FOR REPLICATION is specified. Questa opzione non è valida per le procedure CLR.This option is not valid for CLR procedures. L'opzione RECOMPILE viene ignorata per le procedure create con l'opzione FOR REPLICATION.The RECOMPILE option is ignored for procedures created with FOR REPLICATION.

Nota

Questa opzione non è disponibile in un database indipendente.This option is not available in a contained database.

{ [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }{ [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
Una o più istruzioni Transact-SQLTransact-SQL che includono il corpo della procedura.One or more Transact-SQLTransact-SQL statements comprising the body of the procedure. Per racchiudere le istruzioni è possibile usare le parole chiave facoltative BEGIN ed END.You can use the optional BEGIN and END keywords to enclose the statements. Per altre informazioni, vedere le sezioni Procedure consigliate, Osservazioni generali e Limitazioni e restrizioni in CREATE PROCEDURE (Transact-SQL).For more information, see the Best Practices, General Remarks, and Limitations and Restrictions sections in CREATE PROCEDURE (Transact-SQL).

EXTERNAL NAME assembly_name ***.** class_name . method_nameEXTERNAL NAME *assembly_name ***.** class_name . method_name
Si applica a: SQL Server 2008SQL Server 2008 tramite SQL Server 2017SQL Server 2017.Applies to*: SQL Server 2008SQL Server 2008 through SQL Server 2017SQL Server 2017.

Specifica il metodo di un assembly .NET Framework.NET Framework affinché una stored procedure CLR vi faccia riferimento.Specifies the method of a .NET Framework.NET Framework assembly for a CLR stored procedure to reference. class_name deve essere un identificatore SQL ServerSQL Server valido e deve esistere come classe nell'assembly.class_name must be a valid SQL ServerSQL Server identifier and must exist as a class in the assembly. Se alla classe è stato assegnato un nome completo con lo spazio dei nomi le cui parti sono separate da un punto (.), il nome della classe deve essere delimitato tramite parentesi quadre ([]) o virgolette ("").If the class has a namespace-qualified name uses a period (.) to separate namespace parts, the class name must be delimited by using brackets ([]) or quotation marks (""). Il metodo specificato deve essere un metodo statico della classe.The specified method must be a static method of the class.

Per impostazione predefinita, SQL ServerSQL Server non può eseguire il codice CLR.By default, SQL ServerSQL Server cannot execute CLR code. È possibile creare, modificare ed eliminare gli oggetti di database che fanno riferimento a moduli CLR; tuttavia non è possibile eseguire questi riferimenti in SQL ServerSQL Server finché non viene abilitata l'opzione clr enabled option.You can create, modify, and drop database objects that reference common language runtime modules; however, you cannot execute these references in SQL ServerSQL Server until you enable the clr enabled option. Per abilitare questa opzione, usare sp_configure.To enable the option, use sp_configure.

Nota

Le procedure CLR non sono supportate in un database indipendente.CLR procedures are not supported in a contained database.

Osservazioni generaliGeneral Remarks

Transact-SQLTransact-SQL in stored procedure CLR e viceversa. stored procedures cannot be modified to be CLR stored procedures and vice versa.

ALTER PROCEDURE non modifica le autorizzazioni e non ha effetto sulle stored procedure o sui trigger dipendenti.ALTER PROCEDURE does not change permissions and does not affect any dependent stored procedures or triggers. Le impostazioni della sessione corrente per QUOTED_IDENTIFIER e ANSI_NULLS, tuttavia, vengono incluse nella stored procedure quando viene modificata.However, the current session settings for QUOTED_IDENTIFIER and ANSI_NULLS are included in the stored procedure when it is modified. Se queste impostazioni sono diverse rispetto a quelle applicate quando la stored procedure è stata creata, il funzionamento della stored procedure potrebbe cambiare.If the settings are different from those in effect when stored procedure was originally created, the behavior of the stored procedure may change.

Se una definizione di procedura precedente è stata creata tramite l'opzione WITH ENCRYPTION o WITH RECOMPILE, tale opzione viene abilitata solo se è inclusa nell'istruzione ALTER PROCEDURE.If a previous procedure definition was created using WITH ENCRYPTION or WITH RECOMPILE, these options are enabled only if they are included in ALTER PROCEDURE.

Per altre informazioni, sulle stored procedure, vedere CREATE PROCEDURE (Transact-SQL).For more information about stored procedures, see CREATE PROCEDURE (Transact-SQL).

SecuritySecurity

AutorizzazioniPermissions

È richiesta l'autorizzazione ALTER per la procedura o l'appartenenza al ruolo predefinito del database db_ddladmin.Requires ALTER permission on the procedure or requires membership in the db_ddladmin fixed database role.

EsempiExamples

Nell'esempio seguente si crea la stored procedure uspVendorAllInfo,The following example creates the uspVendorAllInfo stored procedure. che restituisce i nomi di tutti i fornitori di Adventure Works CyclesAdventure Works Cycles, i prodotti da essi forniti nonché le informazioni relative alla posizione creditizia e alla disponibilità.This procedure returns the names of all the vendors that supply Adventure Works CyclesAdventure Works Cycles, the products they supply, their credit ratings, and their availability. Questa procedura viene quindi modificata in modo da restituire un set di risultati diverso.After this procedure is created, it is then modified to return a different result set.


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  

Nell'esempio seguente viene modificata la stored procedure uspVendorAllInfo.The following example alters the uspVendorAllInfo stored procedure. Viene rimossa la clausola EXECUTE AS CALLER e modificato il corpo della procedura in modo da restituire solo i fornitori del prodotto specificato.It removes the EXECUTE AS CALLER clause and modifies the body of the procedure to return only those vendors that supply the specified product. Le funzioni LEFT e CASE personalizzano l'aspetto del set di risultati.The LEFT and CASE functions customize the appearance of the result set.

USE AdventureWorks2012;  
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  

Set di risultati:Here is the result set.

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

Vedere ancheSee Also

CREATE PROCEDURE (Transact-SQL) CREATE PROCEDURE (Transact-SQL)
DROP PROCEDURE (Transact-SQL) DROP PROCEDURE (Transact-SQL)
EXECUTE (Transact-SQL) EXECUTE (Transact-SQL)
EXECUTE AS (Transact-SQL) EXECUTE AS (Transact-SQL)
EVENTDATA (Transact-SQL) EVENTDATA (Transact-SQL)
Stored procedure (Motore di database) Stored Procedures (Database Engine)
sys.procedures (Transact-SQL)sys.procedures (Transact-SQL)