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

S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseS’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Modifie une procédure déjà créée en exécutant l'instruction CREATE PROCEDURE dans SQL ServerSQL Server.Modifies a previously created procedure that was created by executing the CREATE PROCEDURE statement in SQL ServerSQL Server.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL (Transact-SQL)Topic link icon Transact-SQL Syntax Conventions (Transact-SQL)

SyntaxeSyntax

-- 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 Synapse Analytics and Parallel Data Warehouse  
  
ALTER { PROC | PROCEDURE } [schema_name.] procedure_name  
    [ { @parameterdata_type } [= ] ] [ ,...n ]  
AS { [ BEGIN ] sql_statement [ ; ] [ ,...n ] [ END ] }  
[;]  

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumentsArguments

schema_nameschema_name
Nom du schéma auquel appartient la procédure.The name of the schema to which the procedure belongs.

procedure_nameprocedure_name
Nom de la procédure à modifier.The name of the procedure to change. Les noms des procédures doivent respecter les conventions concernant les identificateurs.Procedure names must comply with the rules for identifiers.

; number; number
Entier facultatif existant utilisé pour regrouper les procédures de même nom de façon à pouvoir les supprimer au moyen d’une instruction 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.

Notes

Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

@ parameter@ parameter
Paramètre de la procédure.A parameter in the procedure. Il est possible de spécifier jusqu'à 2 100 paramètres.Up to 2,100 parameters can be specified.

[ type_schema_name .[ type_schema_name. ] data_type] data_type
Type de données du paramètre et du schéma auquel elle appartient.Is the data type of the parameter and the schema it belongs to.

Pour plus d’informations sur les restrictions applicables aux types de données, consultez CREATE PROCEDURE (Transact-SQL).For information about data type restrictions, see CREATE PROCEDURE (Transact-SQL).

VARYINGVARYING
Spécifie le jeu de résultats pris en charge comme paramètre de sortie.Specifies the result set supported as an output parameter. La procédure stockée construit dynamiquement ce paramètre. Son contenu est variable.This parameter is constructed dynamically by the stored procedure and its contents can vary. S'applique seulement aux paramètres de type cursor.Applies only to cursor parameters. Cette option n'est pas valide pour les procédures CLR.This option is not valid for CLR procedures.

defaultdefault
Valeur par défaut pour le paramètre.Is a default value for the parameter.

OUT | OUTPUTOUT | OUTPUT
Indique que le paramètre est un paramètre renvoyé.Indicates that the parameter is a return parameter.

READONLYREADONLY
Indique que le paramètre ne peut pas être mis à jour ou modifié dans le corps de la procédure.Indicates that the parameter cannot be updated or modified within the body of the procedure. Si le type de paramètre est un type de table, READONLY doit être spécifié.If the parameter type is a table-value type, READONLY must be specified.

RECOMPILERECOMPILE
Indique que le Moteur de base de donnéesDatabase Engine n'utilise pas le cache pour le plan de cette procédure et que la procédure est recompilée à l'exécution.Indicates that the Moteur de base de donnéesDatabase Engine does not cache a plan for this procedure and the procedure is recompiled at run time.

ENCRYPTIONENCRYPTION
S’applique à : SQL Server (SQL Server 2008SQL Server 2008 et versions ultérieures) et Azure SQL DatabaseAzure SQL Database.Applies to: SQL Server ( SQL Server 2008SQL Server 2008 and later) and Azure SQL DatabaseAzure SQL Database.

Indique que le Moteur de base de donnéesDatabase Engine se charge de convertir le texte d'origine provenant de l'instruction ALTER PROCEDURE dans un format d'obfuscation.Indicates that the Moteur de base de donnéesDatabase Engine will convert the original text of the ALTER PROCEDURE statement to an obfuscated format. La sortie générée par l'obfuscation n'est pas visible directement dans les affichages catalogue de SQL ServerSQL Server.The output of the obfuscation is not directly visible in any of the catalog views in SQL ServerSQL Server. Les utilisateurs n'ayant pas accès aux tables système ou aux fichiers de base de données ne peuvent pas récupérer le texte d'obfuscation.Users that have no access to system tables or database files cannot retrieve the obfuscated text. Le texte est cependant à la disposition des utilisateurs disposant de privilèges et qui peuvent accéder aux tables système par le biais du port DAC ou qui accèdent directement aux fichiers de bases de données.However, the text will be available to privileged users that can either access system tables over the DAC port or directly access database files. Les utilisateurs qui peuvent associer un débogueur au processus serveur peuvent également récupérer la procédure d'origine de la mémoire au moment de l'exécution.Also, users that can attach a debugger to the server process can retrieve the original procedure from memory at runtime. Pour plus d’informations sur l’accès aux métadonnées système, consultez Configuration de la visibilité des métadonnées.For more information about accessing system metadata, see Metadata Visibility Configuration.

Les procédures créées à l'aide de cette option ne peuvent pas être publiées dans le cadre d'une réplication SQL ServerSQL Server.Procedures created with this option cannot be published as part of SQL ServerSQL Server replication.

Cette option ne peut pas être spécifiée pour les procédures stockées CLR (Common Language Runtime).This option cannot be specified for common language runtime (CLR) stored procedures.

Notes

Au cours d’une mise à niveau, le Moteur de base de donnéesDatabase Engine utilise les commentaires d’obfuscation stockés dans sys.sql_modules pour recréer des procédures.During an upgrade, the Moteur de base de donnéesDatabase Engine uses the obfuscated comments stored in sys.sql_modules to re-create procedures.

EXECUTE ASEXECUTE AS
Spécifie le contexte de sécurité dans lequel exécuter la procédure stockée après y avoir accédé.Specifies the security context under which to execute the stored procedure after it is accessed.

Pour plus d’informations, consultez Clause EXECUTE AS (Transact-SQL).For more information, see EXECUTE AS Clause (Transact-SQL).

FOR REPLICATIONFOR REPLICATION

Indique qu'il n'est pas possible d'exécuter sur l'Abonné les procédures stockées créées pour la réplication.Specifies that stored procedures that are created for replication cannot be executed on the Subscriber. Une procédure stockée créée avec l'option FOR REPLICATION est utilisée comme filtre de procédure stockée et n'est exécutée que lors de la réplication.A stored procedure created with the FOR REPLICATION option is used as a stored procedure filter and only executed during replication. Il n'est pas possible de déclarer des paramètres si FOR REPLICATION est spécifié.Parameters cannot be declared if FOR REPLICATION is specified. Cette option n'est pas valide pour les procédures CLR.This option is not valid for CLR procedures. L'option RECOMPILE est ignorée pour les procédures créées avec l'option FOR REPLICATION.The RECOMPILE option is ignored for procedures created with FOR REPLICATION.

Notes

Cette option n'est pas disponible dans une base de données autonome.This option is not available in a contained database.

{ [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }{ [ BEGIN ] sql_statement [;] [ ...n ] [ END ] }
Une ou plusieurs instructions Transact-SQLTransact-SQL comprenant le corps de la procédure.One or more Transact-SQLTransact-SQL statements comprising the body of the procedure. Vous pouvez utiliser les mots clés facultatifs BEGIN et END pour délimiter les instructions.You can use the optional BEGIN and END keywords to enclose the statements. Pour plus d’informations, consultez les sections Recommandations, Remarques d’ordre général et Limitations et restrictions dans 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
S’applique à : SQL Server 2008SQL Server 2008 et versions ultérieures.Applies to: SQL Server 2008SQL Server 2008 and later.

Précise la méthode d’un assembly .NET Framework.NET Framework pour créer une référence à une procédure stockée CLR.Specifies the method of a .NET Framework.NET Framework assembly for a CLR stored procedure to reference. class_name doit être un identificateur SQL ServerSQL Server valide et doit exister en tant que classe dans l’assembly.class_name must be a valid SQL ServerSQL Server identifier and must exist as a class in the assembly. Si la classe a un nom qualifié par un espace de noms, utilisez un point (.) pour séparer les parties de l’espace de noms. Le nom de la classe doit figurer entre crochets ([]) ou entre guillemets doubles ("").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 (""). La méthode spécifiée doit être une méthode statique de la classe.The specified method must be a static method of the class.

Par défaut, SQL ServerSQL Server ne peut pas exécuter du code CLR.By default, SQL ServerSQL Server cannot execute CLR code. Vous pouvez créer, modifier et supprimer des objets d’une base de données qui font référence à des modules CLR (Common Language Runtime) ; cependant, vous ne pouvez pas exécuter ces références dans SQL ServerSQL Server tant que vous n’avez pas activé l’option CLR enabled.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. Pour activer cette option, utilisez sp_configure.To enable the option, use sp_configure.

Notes

Les procédures CLR ne sont pas prises en charge dans une base de données autonome.CLR procedures are not supported in a contained database.

Remarques d'ordre généralGeneral Remarks

Transact-SQLTransact-SQL pour les transformer en procédures stockées CLR et inversement.stored procedures cannot be modified to be CLR stored procedures and vice versa.

ALTER PROCEDURE ne modifie pas les autorisations et n'affecte aucune procédure stockée ni aucun déclencheur dépendants.ALTER PROCEDURE does not change permissions and does not affect any dependent stored procedures or triggers. Cependant, les paramètres QUOTED_IDENTIFIER et ANSI_NULLS de la session active sont inclus dans la procédure stockée lorsque celle-ci est modifiée.However, the current session settings for QUOTED_IDENTIFIER and ANSI_NULLS are included in the stored procedure when it is modified. Si les paramètres sont différents des paramètres actifs lors de la création de la procédure stockée, le comportement de celle-ci peut changer.If the settings are different from those in effect when stored procedure was originally created, the behavior of the stored procedure may change.

Si une procédure à été créée avec les options WITH ENCRYPTION ou WITH RECOMPILE, ces options sont activées seulement si elles figurent dans l'instruction 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.

Pour plus d’informations sur les procédures stockées, consultez CREATE PROCEDURE (Transact-SQL).For more information about stored procedures, see CREATE PROCEDURE (Transact-SQL).

SécuritéSecurity

AutorisationsPermissions

Nécessite l’autorisation ALTER sur la procédure ou l’appartenance au rôle de base de données fixe db_ddladmin.Requires ALTER permission on the procedure or requires membership in the db_ddladmin fixed database role.

ExemplesExamples

L'exemple suivant crée la procédure stockée uspVendorAllInfo.The following example creates the uspVendorAllInfo stored procedure. Cette procédure retourne le nom de tous les fournisseurs de Adventure Works CyclesAdventure Works Cycles, les produits qu'ils vendent, leurs conditions de crédit et leur 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. Lorsque cette procédure est créée, elle est ensuite modifiée pour renvoyer un jeu de résultats différent.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    

L'exemple suivant modifie la procédure stockée uspVendorAllInfo.The following example alters the uspVendorAllInfo stored procedure. Il supprime la clause EXECUTE AS CALLER et modifie le corps de la procédure pour qu'elle retourne uniquement les fournisseurs qui proposent le produit spécifié.It removes the EXECUTE AS CALLER clause and modifies the body of the procedure to return only those vendors that supply the specified product. Les fonctions LEFT et CASE personnalisent l'affichage du jeu de résultats.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  

Voici le jeu de résultats obtenu.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)`  

Voir aussiSee 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)
Procédures stockées (moteur de base de données) Stored Procedures (Database Engine)
sys.procedures (Transact-SQL)sys.procedures (Transact-SQL)