Eine gespeicherte Prozedur ist eine Gruppe von SQL-Anweisungen, die zu einer kompiliert werden. Gespeicherte Prozeduren können Geschäftslogik und andere Programmierkonstrukte enthalten.
In SQL Server ist eine gespeicherte Prozedur eine Gruppe von einer oder mehreren Transact-SQL-Anweisungen oder ein Verweis auf eine CLR-Methode (Common Runtime Language) von Microsoft .NET Framework.
Programmierbarkeit
Eine gespeicherte Prozedur ist mehr als nur ein langes Skript. Es ist ein Skript, das in SQL Server speziell unter den Stored Procedures gespeichert wurde Knoten, und es kann:
- Eingabeparameter akzeptieren (und mehrere Werte in Form von Ausgabeparametern an das aufrufende Programm zurückgeben).
- Enthalten Programmieranweisungen.
- Gibt einen Statuswert an ein aufrufendes Programm zurück, um Erfolg oder Misserfolg und den Grund für jeden Misserfolg anzuzeigen.
Gespeicherte Prozeduren enthalten häufig Geschäftslogik. Beispielsweise kann eine gespeicherte Prozedur Parameter akzeptieren, die ihr übergeben werden, und diese Parameter mit IF
testen Aussagen. Wenn der Parameter beispielsweise ein Wert ist, tun Sie dies, wenn es sich um einen anderen Wert handelt, tun Sie das.
Gespeicherte Prozeduren können die Leistung in einer Anwendung verbessern, da die gespeicherte Prozedur gleich nach ihrer Erstellung analysiert und optimiert und dann im Arbeitsspeicher gespeichert wird. Das Ausführen einer bedingten Abfrage über eine gespeicherte Prozedur kann extrem schnell sein - im Vergleich zu einer Anwendung, die eine Abfrage über das Netzwerk an den SQL Server sendet und dann alle Daten über das Netzwerk zurückgibt, damit sie sie filtern und auswählen kann nur die Datensätze, an denen es interessiert ist.
Vorteile gespeicherter Prozeduren
Hier sind einige der Hauptvorteile bei der Verwendung gespeicherter Prozeduren:
Vorteil | Erklärung |
---|---|
Modulare Programmierung | Sie können eine gespeicherte Prozedur einmal schreiben und sie dann immer wieder von verschiedenen Teilen einer Anwendung (und sogar von mehreren Anwendungen) aufrufen. |
Leistung | Gespeicherte Prozeduren ermöglichen eine schnellere Codeausführung und reduzieren den Netzwerkverkehr.
|
Sicherheit | Benutzer können eine gespeicherte Prozedur ausführen, ohne eine der Anweisungen direkt ausführen zu müssen. Daher kann eine gespeicherte Prozedur erweiterte Datenbankfunktionen für Benutzer bereitstellen, die normalerweise keinen Zugriff auf diese Aufgaben haben, aber diese Funktionen werden streng kontrolliert zur Verfügung gestellt. |
So erstellen Sie eine gespeicherte Prozedur
Um eine gespeicherte Prozedur zu erstellen, verwenden Sie CREATE PROCEDURE
-Anweisung, gefolgt von dem Code, aus dem die gespeicherte Prozedur besteht. Wenn Ihre gespeicherte Prozedur Parameter akzeptiert, müssen sie nach dem Namen eingefügt werden.
CREATE PROCEDURE myStoredProcedure AS ... OR CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS ...
Beispiel
Hier ist ein Beispiel für das Erstellen einer gespeicherten Prozedur und das anschließende Ausführen dieser gespeicherten Prozedur.
-
Erstellen Sie die gespeicherte Prozedur
Führen Sie die folgende Anweisung für die Musikdatenbank aus, die wir in diesem Tutorial erstellt haben.
In diesem Beispiel wird eine gespeicherte Prozedur namens AlbumsFromArtist erstellt. Es wählt alle Alben von einem Interpreten aus, der angegeben wird, wenn die gespeicherte Prozedur ausgeführt wird.
CREATE PROCEDURE spAlbumsFromArtist @ArtistName varchar(255) AS SELECT AlbumName, ReleaseDate FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId WHERE Artists.ArtistName = @ArtistName; GO
-
Gespeicherte Prozedur anzeigen
Erweitern Sie Programmierbarkeit> Gespeicherte Prozeduren Knoten unter der entsprechenden Datenbank, um Ihre neu erstellte gespeicherte Prozedur anzuzeigen. Sie können auch die Parameter der gespeicherten Prozedur erweitern node, um die Parameter anzuzeigen, die Sie beim Ausführen übergeben müssen.
-
Führen Sie die gespeicherte Prozedur aus
Nachdem die gespeicherte Prozedur erstellt wurde, können Sie sie mit
EXECUTE
ausführen -Anweisung und Übergeben aller erforderlichen Parameter.In unserem Beispiel müssen wir den Namen des Künstlers übergeben.
EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";
Alternativ können Sie den Parameternamen bei der Parameterübergabe weglassen. So:
EXECUTE spAlbumsFromArtist "Devin Townsend";
Ändern einer gespeicherten Prozedur
Sie können Ihre gespeicherte Prozedur mit ALTER PROCEDURE
ändern Erklärung. Genau wie beim Ändern einer Ansicht können Sie eine gespeicherte Prozedur ändern, indem Sie einfach die neue Definition der gespeicherten Prozedur anwenden.
-
Ändern Sie die gespeicherte Prozedur
Führen Sie die folgende Anweisung aus. Dadurch wird den von der gespeicherten Prozedur zurückgegebenen Ergebnissen eine neue Spalte hinzugefügt. Wir fügen den Spaltennamen auch Aliase hinzu.
ALTER PROCEDURE spAlbumsFromArtist @ArtistName varchar(255) AS SELECT al.AlbumName, al.ReleaseDate, g.Genre FROM Albums al INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId INNER JOIN Genres g ON g.GenreId = al.GenreId WHERE ar.ArtistName = @ArtistName; GO
-
Führen Sie die gespeicherte Prozedur aus
Jetzt haben wir das
Genre
hinzugefügt Spalte in die Ansicht, gibt die gespeicherte Prozedur nun diese Spalte zurück, wenn wir sie ausführen.EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";