Delen via


Een opgeslagen procedure wijzigen

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-database in Microsoft Fabric

In dit artikel wordt beschreven hoe u een opgeslagen procedure in SQL Server wijzigt met behulp van SQL Server Management Studio of Transact-SQL.

Beperkingen

Transact-SQL opgeslagen procedures kunnen niet worden gewijzigd in CLR-opgeslagen procedures en omgekeerd.

Als de vorige proceduredefinitie is gemaakt met WITH ENCRYPTION of WITH RECOMPILE, worden deze opties alleen ingeschakeld als ze zijn opgenomen in de ALTER PROCEDURE-instructie.

Machtigingen

Vereist ALTER PROCEDURE-machtiging voor de procedure.

SQL Server Management Studio gebruiken

Een procedure wijzigen in SQL Server Management Studio:

  1. Maak in Objectverkenner verbinding met een exemplaar van de Database Engine en vouw dat exemplaar vervolgens uit.

  2. Vouw Databasesuit, vouw de database waartoe de procedure behoort uit en vouw vervolgens Programmeerbaarheiduit.

  3. Vouw opgeslagen proceduresuit, klik met de rechtermuisknop op de procedure die u wilt wijzigen en selecteer Wijzigen.

  4. Wijzig de tekst van de opgeslagen procedure.

  5. Als u de syntaxis wilt testen, selecteer dan in het menu Query de optie Parseren.

  6. Als u de wijzigingen in de proceduredefinitie wilt opslaan, selecteert u in het menu Queryuitvoeren.

  7. Als u de bijgewerkte proceduredefinitie wilt opslaan als een Transact-SQL script, selecteert u in het menu BestandOpslaan als. Accepteer de bestandsnaam of vervang deze door een nieuwe naam en selecteer Opslaan.

Belangrijk

Valideer alle gebruikersinvoer. Voeg geen gebruikersinvoer samen voordat u deze valideert. Voer nooit een opdracht uit die is samengesteld op basis van niet-gevalideerde gebruikersinvoer. Niet-gevalideerde gebruikersinvoer maakt uw database kwetsbaar voor aanvallen die een SQL-injectieaanvalworden genoemd. Zie SQL-injectievoor meer informatie.

Gebruik Transact-SQL

Een procedure wijzigen met behulp van T-SQL-opdrachten:

  1. Maak in Objectverkennerverbinding met een exemplaar van database-engine en vouw vervolgens dat exemplaar uit.

  2. Vouw Databasesuit en vouw de database uit waartoe de procedure behoort. Of selecteer in de werkbalk de database in de lijst met beschikbare databases. Selecteer voor dit voorbeeld de AdventureWorks2022-database.

  3. Selecteer op het menu Bestand de optie Nieuwe query.

  4. Kopieer en plak het volgende voorbeeld in de queryeditor. In het voorbeeld wordt de Purchasing.uspVendorAllInfo procedure gemaakt, die de namen retourneert van alle leveranciers in de database Adventure Works Cycles, de producten die ze leveren, hun kredietclassificaties en hun beschikbaarheid.

    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   
    
  5. Selecteer Nieuwe queryin het menu Bestand.

  6. Kopieer en plak het volgende voorbeeld in de queryeditor. In het voorbeeld wordt de uspVendorAllInfo procedure gewijzigd. De EXECUTE AS CALLER component wordt verwijderd en de hoofdtekst van de procedure wordt gewijzigd om alleen leveranciers te retourneren die het opgegeven product leveren. De functies LEFT en CASE passen het uiterlijk van de resultatenset aan.

    Belangrijk

    Als u een bestaande opgeslagen procedure verwijdert en opnieuw maakt, worden machtigingen verwijderd die expliciet zijn verleend aan de opgeslagen procedure. Gebruik ALTER om in plaats daarvan de bestaande opgeslagen procedure te wijzigen.

    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. Als u de wijzigingen in de proceduredefinitie wilt opslaan, selecteert u in het menu Queryuitvoeren.

  8. Als u de bijgewerkte proceduredefinitie wilt opslaan als een Transact-SQL script, selecteert u in het menu BestandOpslaan als. Accepteer de bestandsnaam of vervang deze door een nieuwe naam en selecteer Opslaan.

  9. Voer het volgende voorbeeld uit om de gewijzigde opgeslagen procedure uit te voeren.

    EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';  
    GO