Freigeben über


Ändern einer gespeicherten Prozedur

In diesem Thema wird beschrieben, wie eine gespeicherte Prozedur mit SQL Server Management Studio oder Transact-SQL in SQL Server 2012 geändert wird.

  • Vorbereitungen:  Einschränkungen, Sicherheit

  • So ändern Sie eine Prozedur unter Verwendung von  SQL Server Management Studio, Transact-SQL

Vorbereitungen

Einschränkungen

[Nach oben]

Transact-SQL-gespeicherte Prozeduren können nicht in CLR-gespeicherte 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

[Nach oben]

Erfordert ALTER PROCEDURE-Berechtigung für die Prozedur.

Vorgehensweise: Ändern einer gespeicherten Prozedur

Sie können eine der folgenden Anwendungen verwenden:

  • SQL Server Management Studio

  • Transact-SQL

Mit SQL Server Management Studio

So ändern Sie eine Prozedur in Management Studio

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz von Database Engine (Datenbankmodul) her, und erweitern Sie dann diese Instanz.

  2. Erweitern Sie Datenbanken, erweitern Sie die Datenbank, zu der die Prozedur gehört, und erweitern Sie dann Programmierbarkeit.

  3. Erweitern Sie Gespeicherte Prozeduren, klicken Sie mit der rechten Maustaste auf die zu ändernde Prozedur, und klicken Sie dann auf Ändern.

  4. Ändern Sie den Text der gespeicherten Prozedur.

  5. Zum Testen der Syntax klicken Sie im Menü Abfrage auf Analysieren.

  6. Um die Änderungen an der Prozedurdefinition zu speichern, klicken Sie im Menü Abfrage auf Ausführen.

  7. 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.

SicherheitshinweisSicherheitshinweis

Überprüfen Sie alle Benutzereingaben. Verketten Sie keine Benutzereingaben, bevor Sie sie überprüft haben. Führen Sie niemals Befehle aus, die sich aus unüberprüften Benutzereingaben zusammensetzen.

Mit Transact-SQL

So ändern Sie eine Prozedur im Abfrage-Editor

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz von Database Engine (Datenbankmodul) her, und erweitern Sie dann diese Instanz.

  2. 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 AdventureWorks2012 -Datenbank aus.

  3. Klicken Sie im Menü Datei auf Neue Abfrage.

  4. 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.

    USE AdventureWorks2012;
    GO
    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
    
  5. Klicken Sie im Menü Datei auf Neue Abfrage.

  6. 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 Funktionen LEFT und CASE wird die Darstellung des Resultsets angepasst.

    USE AdventureWorks2012;
    GO
    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. Um die Änderungen an der Prozedurdefinition zu speichern, klicken Sie im Menü Abfrage auf Ausführen.

  8. 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.

  9. Um die geänderte gespeicherte Prozedur auszuführen, führen Sie das folgende Beispiel aus.

    EXEC Purchasing.uspVendorAllInfo N'LL Crankarm';
    GO
    

[Nach oben]

Siehe auch

Verweis

ALTER PROCEDURE (Transact-SQL)