Dela via


Ändra en lagrad procedur

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-databas i Microsoft Fabric

Den här artikeln beskriver hur du ändrar en lagrad procedur i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL.

Begränsningar

Transact-SQL lagrade procedurer kan inte ändras så att de är CLR-lagrade procedurer och vice versa.

Om den tidigare procedurdefinitionen skapades med hjälp av WITH ENCRYPTION eller WITH RECOMPILEaktiveras dessa alternativ endast om de ingår i ALTER PROCEDURE-instruktionen.

Behörigheter

Kräver ALTER PROCEDURE-behörighet för proceduren.

Använda SQL Server Management Studio

Så här ändrar du en procedur i SQL Server Management Studio:

  1. I Object Explorer ansluter du till en instans av databasmotorn och expanderar sedan den instansen.

  2. Expandera Databaser, expandera databasen som proceduren tillhör och expandera sedan Programmerbarhet.

  3. Expandera Lagrade procedurer, högerklicka på proceduren för att ändra och välj sedan Ändra.

  4. Ändra texten i den lagrade proceduren.

  5. Om du vill testa syntaxen går du till menyn Query och väljer Parsa.

  6. Om du vill spara ändringarna i procedurdefinitionen går du till menyn Query och väljer Kör.

  7. Om du vill spara den uppdaterade procedurdefinitionen som ett Transact-SQL skript går du till menyn Arkiv och väljer Spara som. Acceptera filnamnet eller ersätt det med ett nytt namn och välj sedan Spara.

Viktig

Verifiera alla användarindata. Sammanfoga inte användarindata innan du verifierar det. Kör aldrig ett kommando som skapats med ovaliderade användarindata. Ovaliderade användarindata gör din databas sårbar för en typ av exploatering som kallas en SQL-inmatningsattack. För mer information, se SQL-injektion.

Använd Transact-SQL

Så här ändrar du en procedur med hjälp av T-SQL-kommandon:

  1. I Object Exploreransluter du till en instans av databasmotorn och expanderar sedan den instansen.

  2. Expandera Databaser, expandera databasen som proceduren tillhör. Du kan också välja databasen i listan över tillgängliga databaser i verktygsfältet. I det här exemplet väljer du databasen AdventureWorks2022.

  3. På menyn Arkiv väljer du Ny fråga.

  4. Kopiera och klistra in följande exempel i frågeredigeraren. I exemplet skapas proceduren Purchasing.uspVendorAllInfo, som returnerar namnen på alla leverantörer i databasen Adventure Works Cycles, de produkter som de tillhandahåller, deras kreditbetyg och deras tillgänglighet.

    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. På menyn Arkiv väljer du Ny fråga.

  6. Kopiera och klistra in följande exempel i frågeredigeraren. Exemplet ändrar proceduren uspVendorAllInfo. Satsen EXECUTE AS CALLER tas bort och brödtexten i proceduren ändras så att endast de leverantörer som tillhandahåller den angivna produkten returneras. Funktionerna LEFT och CASE anpassar resultatets utseende.

    Viktig

    När du tar bort och återskapar en befintlig lagrad procedur tar du bort behörigheter som uttryckligen har beviljats till den lagrade proceduren. Använd ALTER för att ändra den befintliga lagrade proceduren i stället.

    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. Om du vill spara ändringarna i procedurdefinitionen går du till menyn Query och väljer Kör.

  8. Om du vill spara den uppdaterade procedurdefinitionen som ett Transact-SQL skript går du till menyn Arkiv och väljer Spara som. Acceptera filnamnet eller ersätt det med ett nytt namn och välj sedan Spara.

  9. Kör följande exempel för att köra den ändrade lagrade proceduren.

    EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';  
    GO