ALTER PROCEDURE (Transact-SQL)

Modifie une procédure déjà créée en exécutant l'instruction CREATE PROCEDURE. ALTER PROCEDURE ne modifie pas les autorisations et n'affecte aucune procédure ni aucun déclencheur dépendants. 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. 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.

Icône Lien de rubriqueConventions de la syntaxe Transact-SQL (Transact-SQL)

Syntaxe

--Transact-SQL Stored Procedure Syntax
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 ]

--CLR Stored Procedure Syntax
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 }
[;]

Arguments

  • schema_name
    Nom du schéma auquel appartient la procédure.

  • procedure_name
    Nom de la procédure à modifier. Les noms des procédures doivent respecter les conventions concernant les identificateurs.

  • **;**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.

    [!REMARQUE]

    Cette fonctionnalité sera supprimée dans une prochaine version de 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é.

  • **@**parameter
    Paramètre de la procédure. Il est possible de spécifier jusqu'à 2 100 paramètres.

  • [ type_schema_name**.** ] data_type
    Type de données du paramètre et du schéma auquel elle appartient.

    Pour plus d'informations sur les restrictions applicables aux types de données, consultez CREATE PROCEDURE (Transact-SQL).

  • VARYING
    Spécifie l'ensemble de résultats pris en charge comme paramètre de sortie. La procédure stockée construit dynamiquement ce paramètre. Son contenu est variable. S'applique seulement aux paramètres de type cursor.

  • default
    Valeur par défaut pour le paramètre.

  • OUT | OUTPUT
    Indique que le paramètre est un paramètre de retour.

  • READONLY
    Indique que le paramètre ne peut pas être mis à jour ou modifié dans le corps de la procédure. Si le type de paramètre est un type table, READONLY doit être spécifié.

  • RECOMPILE
    Indique que le moteur de base de données SQL Server 2005 n'utilise pas le cache pour le plan de cette procédure et que la procédure est recompilée à l'exécution.

  • ENCRYPTION
    Indique que le moteur de base de données se charge de convertir le texte d'origine provenant de l'instruction ALTER PROCEDURE dans un format d'obfuscation. La sortie générée par l'obfuscation n'est pas visible directement dans les affichages catalogue de SQL Server 2005. 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. Le texte est cependant à la disposition des utilisateurs dotés de privilèges qui accèdent aux tables système via le port DAC ou qui accèdent directement aux fichiers de base de données. 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. Pour plus d'informations sur l'accès aux métadonnées système, consultez Configuration de la visibilité des métadonnées.

    Les procédures créées à l'aide de cette option ne peuvent pas être publiées dans le cadre d'une réplication SQL Server.

    Cette option ne peut pas être spécifiée pour les procédures stockées CLR (Common Language Runtime).

    [!REMARQUE]

    Au cours d'une mise à niveau, le moteur de base de données utilise les commentaires d'obfuscation stockés dans sys.sql_modules pour recréer des procédures.

  • EXECUTE AS
    Spécifie le contexte de sécurité dans lequel exécuter la procédure stockée après y avoir accédé.

    Pour plus d'informations, consultez Clause EXECUTE AS (Transact-SQL).

  • FOR 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. 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. Il n'est pas possible de déclarer des paramètres si FOR REPLICATION est spécifié. L'option RECOMPILE est ignorée pour les procédures créées avec l'option FOR REPLICATION.

  • AS
    Actions que la procédure doit effectuer.

  • <sql_statement>
    Tout numéro et type d'instructions Transact-SQL à inclure dans la procédure. Certaines limitations sont applicables. Pour plus d'informations, consultez « Limitations de <sql_statement> » dans CREATE PROCEDURE (Transact-SQL).

  • EXTERNAL NAME assembly_name**.class_name.method_name
    Spécifie la méthode d'un assembly Microsoft.NET Framework pour créer une référence à une procédure stockée CLR. class_name doit être un identificateur SQL Server valide et doit exister au sein d'une classe de l'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 (" "). La méthode spécifiée doit être une méthode statique de la classe.

    [!REMARQUE]

    Par défaut, SQL Server ne peut pas exécuter du code CLR. 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 Server tant que vous n'avez pas activé l'option clr enabled. Pour activer cette option, utilisez sp_configure.

Notes

Il n'est pas possible de modifier des procédures stockées Transact-SQL pour les transformer en procédures stockées CLR et inversement.

Pour plus d'informations, consultez la section Remarques dans CREATE PROCEDURE (Transact-SQL).

[!REMARQUE]

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.

Autorisations

Nécessite l'autorisation ALTER sur la procédure.

Exemple

L'exemple suivant crée la procédure stockée uspVendorAllInfo. Cette procédure retourne le nom de tous les fournisseurs de Adventure Works Cycles, les produits qu'ils vendent, leurs conditions de crédit et leur disponibilité. Lorsque cette procédure est créée, elle est ensuite modifiée pour renvoyer un ensemble de résultats différent.

USE AdventureWorks;
GO
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 'Credit Rating', 
      v.ActiveFlag AS Availability
    FROM Purchasing.Vendor v 
    INNER JOIN Purchasing.ProductVendor pv
      ON v.VendorID = pv.VendorID 
    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 (sans l'option EXECUTE AS) pour qu'elle retourne uniquement les fournisseurs qui proposent le produit spécifié. Les fonctions LEFT et CASE personnalisent l'affichage de l'ensemble de résultats.

ALTER PROCEDURE Purchasing.uspVendorAllInfo
    @Product varchar(25) 
AS
    SELECT LEFT(v.Name, 25) AS Vendor, LEFT(p.Name, 25) AS 'Product name', 
    'Credit 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.VendorID = pv.VendorID 
    INNER JOIN Production.Product AS p 
      ON pv.ProductID = p.ProductID 
    WHERE p.Name LIKE @Product
    ORDER BY v.Name ASC;
GO
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';
GO

Voici l'ensemble des résultats.

Vendor               Product name        Credit rating Availability
-------------------- ------------------- ------------- ------------
Proseware, Inc.      LL Crankarm         Average       No
Vision Cycles, Inc.  LL Crankarm         Superior      Yes

(2 row(s) affected)

Voir aussi

Tâches

Référence

Concepts

Autres ressources