Modifier une procédure stockée

S’applique à : SQL Server (toutes les versions prises en charge) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Cet article explique comment modifier une procédure stockée dans SQL Server en utilisant SQL Server Management Studio ou Transact-SQL.

Limitations et restrictions

Les procédures stockées Transact-SQL ne peuvent pas être transformées en procédures stockées CLR, et inversement.

Si la procédure précédente a é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 PROCEDURE sur la procédure.

Utilisez SQL Server Management Studio.

Pour modifier une procédure dans SQL Server Management Studio :

  1. Dans l'Explorateur d'objets, connectez-vous à une instance de Moteur de base de données et développez-la.

  2. Développez Bases de données, développez la base de données à laquelle appartient la procédure, puis développez Programmabilité.

  3. Développez Procédures stockées, cliquez avec le bouton droit sur la procédure à modifier, puis sélectionnez Modifier.

  4. Modifiez le texte de la procédure stockée.

  5. Pour tester la syntaxe, dans le menu Requête, sélectionnez Analyser.

  6. Pour enregistrer les modifications apportées à la définition de la procédure, dans le menu Requête, sélectionnez Exécuter.

  7. Pour enregistrer la définition de procédure mise à jour en tant que script Transact-SQL, dans le menu Fichier , sélectionnez Enregistrer sous. Acceptez le nom de fichier ou remplacez-le par un autre nom, puis sélectionnez Enregistrer.

Important

Validez toutes les entrées utilisateur. Ne concaténez pas les entrées utilisateur avant de les avoir validées. N'exécutez jamais une commande élaborée à partir d'une entrée utilisateur non validée. Pour plus d’informations, consultez Injection de SQL.

Utiliser Transact-SQL

Pour modifier une procédure en utilisant des commandes T-SQL :

  1. Dans l' Explorateur d'objets, connectez-vous à une instance du Moteur de base de données et développez-la.

  2. Développez Bases de données, développez la base de données à laquelle appartient la procédure. Sinon, dans la barre d'outils, sélectionnez une base de données dans la liste des bases de données disponibles. Pour cet exemple, sélectionnez la base de données AdventureWorks2012 .

  3. Dans le menu Fichier, sélectionnez Nouvelle requête.

  4. Copiez et collez l'exemple suivant dans l'éditeur de requête. L'exemple crée la procédure uspVendorAllInfo qui retourne le nom de tous les fournisseurs dans la base de données Adventure Works Cycles , les produits qu'ils vendent, leurs conditions de crédit et leur disponibilité.

    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   
    

    Important

    La suppression et la recréation d’une procédure stockée existante suppriment les autorisations qui ont été accordées explicitement à la procédure stockée. Utilisez ALTER à la place.

  5. Dans le menu Fichier, sélectionnez Nouvelle requête.

  6. Copiez et collez l'exemple suivant dans l'éditeur de requête. L'exemple modifie la procédure uspVendorAllInfo . La clause EXECUTE AS CALLER est supprimée et le corps de la procédure est modifié de façon à retourner seulement les fournisseurs qui proposent le produit spécifié. Les fonctions LEFT et CASE personnalisent l'affichage du jeu de résultats.

    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  
    
  7. Pour enregistrer les modifications apportées à la définition de la procédure, dans le menu Requête, sélectionnez Exécuter.

  8. Pour enregistrer la définition de procédure mise à jour en tant que script Transact-SQL, dans le menu Fichier , sélectionnez Enregistrer sous. Acceptez le nom de fichier ou remplacez-le par un autre nom, puis sélectionnez Enregistrer.

  9. Pour exécuter la procédure stockée modifiée, exécutez l'exemple suivant.

    EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';  
    GO  
    

Étapes suivantes