Modyfikowanie procedury składowanej
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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:
W Eksploratorze obiektów połącz się z wystąpieniem silnika bazy danych, a następnie rozwiń je.
Rozwiń Databases, rozwiń bazę danych, do której należy procedura, a następnie rozwiń Programmability.
Rozwiń Procedury składowane, kliknij prawym przyciskiem myszy procedurę, którą chcesz zmodyfikować, a następnie wybierz Modyfikuj.
Zmodyfikuj tekst procedury składowanej.
Aby przetestować składnię, w menu Zapytanie wybierz pozycję Przeanalizuj.
Aby zapisać modyfikacje definicji procedury, w menu Zapytanie wybierz pozycję Wykonaj.
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:
W Eksploratorze Obiektów połącz się z instancją silnika bazy danych, a następnie rozwiń tę instancję.
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
.W menu plik wybierz pozycję Nowe zapytanie.
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
W menu Plik wybierz pozycję Nowe zapytanie.
Skopiuj i wklej poniższy przykład do edytora zapytań. Przykład modyfikuje procedurę
uspVendorAllInfo
. KlauzulaEXECUTE AS CALLER
jest usuwana, a treść procedury jest modyfikowana w celu zwrócenia tylko tych dostawców, którzy dostarczają określony produkt. FunkcjeLEFT
iCASE
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
Aby zapisać modyfikacje definicji procedury, w menu Zapytanie wybierz pozycję Wykonaj.
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.
Aby uruchomić zmodyfikowaną procedurę składowaną, wykonaj następujący przykład.
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm'; GO