Ändern einer gespeicherten Prozedur
In diesem Thema wird beschrieben, wie Sie eine gespeicherte Prozedur in SQL Server 2014 mithilfe von SQL Server Management Studio oder Transact-SQL ändern.
Vorbereitung: Einschränkungen, Sicherheit
So ändern Sie eine Prozedur mithilfe von: SQL Server Management Studio, Transact-SQL
Vorbereitungen
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.
Sicherheit
Berechtigungen
Erfordert ALTER PROCEDURE-Berechtigung für die Prozedur.
Vorgehensweise: Ändern einer gespeicherten Prozedur
Sie können eine der folgenden Anwendungen verwenden:
Verwendung von SQL Server Management Studio
So ändern Sie eine Prozedur in Management Studio
Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz der 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 klicken Sie dann auf Ändern.
Ändern Sie den Text der gespeicherten Prozedur.
Zum Testen der Syntax klicken Sie im Menü Abfrage auf Analysieren.
Um die Änderungen an der Prozedurdefinition zu speichern, klicken Sie im Menü Abfrage auf Ausführen.
Um die aktualisierte Prozedurdefinition als Transact-SQL-Skript zu speichern, klicken Sie im Menü "Datei " auf " Speichern unter". Nehmen Sie den Dateinamen an oder ersetzen Sie ihn durch einen neuen Namen, und klicken Sie dann auf Speichern.
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.
Verwenden von Transact-SQL
So ändern Sie eine Prozedur im Abfrage-Editor
Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz der 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 in diesem Beispiel die AdventureWorks2012-Datenbank aus.
Klicken Sie im Menü Datei auf Neue Abfrage.
Kopieren Sie das folgenden Beispiel, und fügen Sie es in den Abfrage-Editor ein. Das Beispiel erstellt die
uspVendorAllInfo
-Prozedur, die die Namen aller Anbieter in der Adventure Works Cycles-Datenbank, die von ihnen gelieferten Produkte, ihre Bonität und Verfügbarkeit zurückgibt.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
Klicken Sie im Menü Datei auf Neue Abfrage.
Kopieren Sie das folgenden Beispiel, und fügen Sie es in den Abfrage-Editor ein. Im Beispiel wird die
uspVendorAllInfo
-Prozedur geändert. Die EXECUTE AS CALLER-Klausel wird entfernt, und der Textkörper der Prozedur wird 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
Um die Änderungen an der Prozedurdefinition zu speichern, klicken Sie im Menü Abfrage auf Ausführen.
Um die aktualisierte Prozedurdefinition als Transact-SQL-Skript zu speichern, klicken Sie im Menü "Datei " auf " Speichern unter". Nehmen Sie den Dateinamen an oder ersetzen Sie ihn durch einen neuen Namen, und klicken Sie dann auf Speichern.
Um die geänderte gespeicherte Prozedur auszuführen, führen Sie das folgende Beispiel aus.
EXEC Purchasing.uspVendorAllInfo N'LL Crankarm'; GO