Sdílet prostřednictvím


Úprava uložené procedury

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL databáze v Microsoft Fabric

Tento článek popisuje, jak upravit uloženou proceduru v SQL Serveru pomocí aplikace SQL Server Management Studio nebo Transact-SQL.

Omezení

Transact-SQL uložené procedury nelze měnit na CLR uložené procedury a naopak.

Pokud byla předchozí definice procedury vytvořena pomocí WITH ENCRYPTION nebo WITH RECOMPILE, tyto možnosti jsou povoleny pouze v případě, že jsou zahrnuty do příkazu ALTER PROCEDURE.

Dovolení

Vyžaduje oprávnění ALTER PROCEDURE pro proceduru.

Použití aplikace SQL Server Management Studio

Úprava procedury v aplikaci SQL Server Management Studio:

  1. V Průzkumníku objektů se připojte k instanci databázového stroje a pak tuto instanci rozbalte.

  2. Rozbalte Databáze, rozbalte databázi, ke které procedura náleží, a potom rozbalte Programovatelnost.

  3. Rozbalte uložené procedury, klepněte pravým tlačítkem myši na proceduru, kterou chcete upravit, a potom vyberte Upravit.

  4. Upravte text uložené procedury.

  5. Syntaxi otestujete tak, že v nabídce Dotaz vyberete Parsovat.

  6. Pokud chcete uložit úpravy definice procedury, v nabídce dotazu vyberte Provést.

  7. Pokud chcete aktualizovanou definici procedury uložit jako skript Transact-SQL, vyberte v nabídce SouborUložit jako. Přijměte název souboru nebo ho nahraďte novým názvem a pak vyberte Uložit.

Důležitý

Ověřte veškerý vstup uživatele. Neukládejte uživatelský vstup do řetězce, dokud jej neověříte. Nikdy nespouštět příkaz vytvořený z neplatného uživatelského vstupu. Neplatný vstup uživatele zneužije vaši databázi jako typ zneužití označovaného jako útok útok prostřednictvím injektáže SQL. Další informace naleznete v tématu SQL injekce.

Použijte Transact-SQL

Úprava procedury pomocí příkazů T-SQL:

  1. V Průzkumníku objektůse připojte k instanci Databázového stroje a poté tuto instanci rozbalte.

  2. Rozbalte Databáze, rozbalte databázi, do které procedura patří. Nebo na panelu nástrojů vyberte databázi ze seznamu dostupných databází. V tomto příkladu vyberte databázi AdventureWorks2022.

  3. V nabídce Soubor vyberte Nový dotaz.

  4. Zkopírujte a vložte následující příklad do editoru dotazů. Příklad vytvoří Purchasing.uspVendorAllInfo proceduru, která vrátí názvy všech dodavatelů v databázi Adventure Works Cycles, produkty, které dodávají, jejich ratingy a dostupnost.

    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. V nabídce Soubor vyberte Nový dotaz.

  6. Zkopírujte a vložte následující příklad do editoru dotazů. Příklad upraví uspVendorAllInfo proceduru. Klauzule EXECUTE AS CALLER je odstraněna a tělo postupu je změněno tak, aby vrátilo pouze dodavatele, kteří dodávají zadaný produkt. Funkce LEFT a CASE přizpůsobí vzhled sady výsledků.

    Důležitý

    Vyřazení a opětovné vytvoření existující uložené procedury odebere oprávnění explicitně udělená uložené proceduře. Pomocí ALTER místo toho upravte existující uloženou proceduru.

    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. Pokud chcete uložit úpravy definice procedury, vyberte v nabídce dotazu možnost Execute.

  8. Pokud chcete aktualizovanou definici procedury uložit jako skript Transact-SQL, vyberte v nabídce SouborUložit jako. Přijměte název souboru nebo ho nahraďte novým názvem a pak vyberte Uložit.

  9. Pokud chcete spustit upravenou uloženou proceduru, spusťte následující příklad.

    EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';  
    GO