Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erstellen Sie eine gespeicherte Prozedur in SQL Server 2017

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.
  • Schnellere Ausführung:Gespeicherte Prozeduren werden geparst und optimiert, sobald sie erstellt werden, und die gespeicherte Prozedur wird im Arbeitsspeicher gespeichert. Dies bedeutet, dass es viel schneller ausgeführt wird, als viele Zeilen SQL-Code von Ihrer Anwendung an den SQL Server zu senden. Dazu muss SQL Server Ihren SQL-Code bei jeder Ausführung kompilieren und optimieren.
  • Reduzierter Netzwerkverkehr:Wenn Sie viele Zeilen SQL-Code über das Netzwerk an Ihren SQL Server senden, wirkt sich dies auf die Netzwerkleistung aus. Dies gilt insbesondere, wenn Sie Hunderte von Zeilen SQL-Code haben und/oder Ihre Anwendung viel Aktivität hat. Durch Ausführen des Codes auf dem SQL Server (als gespeicherte Prozedur) entfällt die Notwendigkeit, diesen Code über das Netzwerk zu senden. Der einzige Netzwerkverkehr besteht aus den bereitgestellten Parametern und den Ergebnissen aller Abfragen.
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.

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

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

  1. Ä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
  2. 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";