Ändern einer gespeicherten Prozedur
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
In diesem Artikel wird beschrieben, wie eine gespeicherte Prozedur in SQL Server mithilfe von SQL Server Management Studio oder Transact-SQL geändert werden kann.
Einschränkungen
Gespeicherte Transact-SQL-Prozeduren können nicht in gespeicherte CLR-Prozeduren geändert werden und umgekehrt.
Wenn die vorherige Prozedurdefinition mit WITH ENCRYPTION oder WITH RECOMPILE erstellt wurde, sind diese Optionen nur dann aktiviert, wenn sie in der ALTER PROCEDURE-Anweisung enthalten sind.
Berechtigungen
Erfordert ALTER PROCEDURE-Berechtigung für die Prozedur.
Verwenden von SQL Server Management Studio
So ändern Sie eine Prozedur in SQL Server Management Studio:
Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz von Datenbank-Engine her, und erweitern Sie dann diese Instanz.
Erweitern Sie Datenbanken, erweitern Sie die Datenbank, zu der die Prozedur gehört, und erweitern Sie dann Programmierbarkeit.
Erweitern Sie Gespeicherte Prozeduren, klicken Sie mit der rechten Maustaste auf die zu ändernde Prozedur, und wählen Sie dann Ändern aus.
Ändern Sie den Text der gespeicherten Prozedur.
Wählen Sie zum Testen der Syntax die Option Analysieren im Menü Abfrage aus.
Wählen Sie zum Speichern der Änderungen an der Prozedurdefinition im Menü Abfrage die Option Ausführen aus.
Wählen Sie im Menü Datei die Option Speichern unter aus, um die aktualisierte Prozedurdefinition als Transact-SQL-Skript zu speichern. Nehmen Sie den Dateinamen an, oder ersetzen Sie ihn durch einen neuen Namen, und wählen Sie dann Speichern aus.
Wichtig
Überprüfen Sie alle Benutzereingaben. Verketten Sie keine Benutzereingaben, bevor Sie sie überprüft haben. Führen Sie niemals Befehle aus, die sich aus nicht überprüften Benutzereingaben zusammensetzen. Weitere Informationen finden Sie unter Einschleusung von SQL-Befehlen.
Verwenden von Transact-SQL
So ändern Sie eine Prozedur mithilfe von T-SQL-Befehlen:
Stellen Sie im Objekt-Explorereine Verbindung mit einer Instanz von Datenbank-Engine her, und erweitern Sie dann diese Instanz.
Erweitern Sie Datenbanken, und erweitern Sie die Datenbank, der die Prozedur angehört. Oder wählen Sie die Datenbank über die Symbolleiste aus der Liste der verfügbaren Datenbanken aus. Wählen Sie für dieses Beispiel die
AdventureWorks2022
-Datenbank aus.Wählen Sie im Menü Datei die Option Neue Abfrage aus.
Kopieren Sie das folgenden Beispiel, und fügen Sie es in den Abfrage-Editor ein. Im ersten Beispiel wird die
uspVendorAllInfo
-Prozedur erstellt. Diese Prozedur gibt die Namen, die gelieferten Produkte, die Bonität und die Verfügbarkeit aller Hersteller in der Adventure Works Cycles -Datenbank, die das Unternehmen beliefern, zurück.IF OBJECT_ID ( 'Purchasing.uspVendorAllInfo', 'P' ) IS NOT NULL DROP PROCEDURE Purchasing.uspVendorAllInfo; GO 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
Wichtig
Durch das Löschen und erneute Erstellen einer vorhandenen gespeicherten Prozedur werden Berechtigungen entfernt, die der gespeicherten Prozedur explizit erteilt wurden. Verwenden Sie stattdessen „ALTER“.
Wählen Sie im Menü Datei die Option Neue Abfrage aus.
Kopieren Sie das folgenden Beispiel, und fügen Sie es in den Abfrage-Editor ein. Im Beispiel wird die
uspVendorAllInfo
-Prozedur geändert. DieEXECUTE AS CALLER
-Klausel wird entfernt und der Textkörper der Prozedur so geändert, dass nur Hersteller zurückgegeben werden, die das angegebene Produkt liefern. Mit den FunktionenLEFT
undCASE
wird die Darstellung des Resultsets angepasst.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
Wählen Sie zum Speichern der Änderungen an der Prozedurdefinition im Menü Abfrage die Option Ausführen aus.
Wählen Sie im Menü Datei die Option Speichern unter aus, um die aktualisierte Prozedurdefinition als Transact-SQL-Skript zu speichern. Nehmen Sie den Dateinamen an, oder ersetzen Sie ihn durch einen neuen Namen, und wählen Sie dann Speichern aus.
Um die geänderte gespeicherte Prozedur auszuführen, führen Sie das folgende Beispiel aus.
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm'; GO
Nächste Schritte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für