Udostępnij za pośrednictwem


Modyfikowanie procedury składowanej

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w usłudze Microsoft Fabric

W tym artykule opisano sposób modyfikowania procedury składowanej w programie SQL Server przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL.

Ograniczenia

Transact-SQL Procedury składowane nie można modyfikować na procedury składowane CLR i odwrotnie.

Jeśli poprzednia definicja procedury została utworzona przy użyciu WITH ENCRYPTION lub WITH RECOMPILE, te opcje są włączone tylko wtedy, gdy są uwzględnione w instrukcji ALTER PROCEDURE.

Uprawnienia

Wymaga uprawnienia ALTER PROCEDURE do procedury.

Korzystanie z programu SQL Server Management Studio

Aby zmodyfikować procedurę w programie SQL Server Management Studio:

  1. W Eksploratorze obiektów połącz się z wystąpieniem silnika bazy danych, a następnie rozwiń je.

  2. Rozwiń Databases, rozwiń bazę danych, do której należy procedura, a następnie rozwiń Programmability.

  3. Rozwiń Procedury składowane, kliknij prawym przyciskiem myszy procedurę, którą chcesz zmodyfikować, a następnie wybierz Modyfikuj.

  4. Zmodyfikuj tekst procedury składowanej.

  5. Aby przetestować składnię, w menu Zapytanie wybierz pozycję Przeanalizuj.

  6. Aby zapisać modyfikacje definicji procedury, w menu Zapytanie wybierz pozycję Wykonaj.

  7. Aby zapisać zaktualizowaną definicję procedury jako skrypt Transact-SQL, w menu Plik wybierz pozycję Zapisz jako. Zaakceptuj nazwę pliku lub zastąp ją nową nazwą, a następnie wybierz Zapisz.

Ważny

Zweryfikuj wszystkie dane wejściowe użytkownika. Nie należy łączyć danych wejściowych użytkownika przed jego zweryfikowaniem. Nigdy nie wykonaj polecenia skonstruowanego z niewaleowanych danych wejściowych użytkownika. Niezawalczone dane wejściowe użytkownika sprawiają, że baza danych jest podatna na ataki typu wykorzystujące luki w zabezpieczeniach nazywane atakiem polegającym na wstrzyknięciu kodu SQL. Aby uzyskać więcej informacji, zobacz wstrzykiwanie SQL.

Korzystanie z Transact-SQL

Aby zmodyfikować procedurę przy użyciu poleceń języka T-SQL:

  1. W Eksploratorze Obiektów połącz się z instancją silnika bazy danych, a następnie rozwiń tę instancję.

  2. Rozwiń węzeł Databases, rozwiń bazę danych, do której należy procedura. Lub na pasku narzędzi wybierz bazę danych z listy dostępnych baz danych. W tym przykładzie wybierz bazę danych AdventureWorks2022.

  3. W menu plik wybierz pozycję Nowe zapytanie.

  4. Skopiuj i wklej poniższy przykład do edytora zapytań. W przykładzie utworzono procedurę Purchasing.uspVendorAllInfo, która zwraca nazwy wszystkich dostawców w bazie danych Adventure Works Cycles, produktów, które dostarczają, oceny kredytowe i dostępność.

    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. W menu Plik wybierz pozycję Nowe zapytanie.

  6. Skopiuj i wklej poniższy przykład do edytora zapytań. Przykład modyfikuje procedurę uspVendorAllInfo. Klauzula EXECUTE AS CALLER jest usuwana, a treść procedury jest modyfikowana w celu zwrócenia tylko tych dostawców, którzy dostarczają określony produkt. Funkcje LEFT i CASE dostosują wygląd zestawu wyników.

    Ważny

    Usunięcie i ponowne utworzenie istniejącej procedury składowanej spowoduje usunięcie uprawnień, które zostały jawnie przyznane procedurze składowanej. Użyj ALTER, aby zmodyfikować istniejącą procedurę składowaną.

    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. Aby zapisać modyfikacje definicji procedury, w menu Zapytanie wybierz pozycję Wykonaj.

  8. Aby zapisać zaktualizowaną definicję procedury jako skrypt Transact-SQL, w menu Plik wybierz pozycję Zapisz jako. Zaakceptuj nazwę pliku lub zastąp ją nową nazwą, następnie wybierz Zapisz.

  9. Aby uruchomić zmodyfikowaną procedurę składowaną, wykonaj następujący przykład.

    EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';  
    GO