Een opgeslagen procedure is een groep SQL-instructies die tot één is gecompileerd. Opgeslagen procedures kunnen bedrijfslogica en andere programmeerconstructies bevatten.
In SQL Server is een opgeslagen procedure een groep van een of meer Transact-SQL-instructies of een verwijzing naar een Microsoft .NET Framework Common Runtime Language (CLR)-methode.
Programmeerbaarheid
Een opgeslagen procedure is meer dan alleen een lang script. Het is een script dat specifiek in SQL Server is opgeslagen onder de Opgeslagen procedures knooppunt, en het kan:
- Accepteer invoerparameters (en retourneer meerdere waarden in de vorm van uitvoerparameters naar het aanroepende programma).
- Bevat programmeerinstructies.
- Retourneer een statuswaarde aan een aanroepend programma om succes of mislukking aan te geven, en de reden voor elke mislukking.
Opgeslagen procedures bevatten vaak bedrijfslogica. Een opgeslagen procedure kan bijvoorbeeld parameters accepteren die eraan worden doorgegeven en testen tegen die parameters met behulp van IF
verklaringen. Bijvoorbeeld, als de parameter één waarde is, doe dit, als het een andere waarde is, doe dat.
Opgeslagen procedures kunnen de prestaties in een toepassing verbeteren, omdat de opgeslagen procedure wordt geparseerd en geoptimaliseerd zodra deze is gemaakt en vervolgens in het geheugen wordt opgeslagen. Het uitvoeren van een voorwaardelijke query via een opgeslagen procedure kan extreem snel zijn - in vergelijking met een toepassing die een query over het netwerk naar de SQL Server verzendt en vervolgens alle gegevens via het netwerk terugstuurt, zodat deze er doorheen kan filteren en eruit kan halen alleen de records waarin het geïnteresseerd is.
Voordelen van opgeslagen procedures
Hier zijn enkele van de belangrijkste voordelen van het gebruik van opgeslagen procedures:
Voordeel | Uitleg |
---|---|
Modulair programmeren | Je kunt een opgeslagen procedure één keer schrijven en deze vervolgens keer op keer oproepen, vanuit verschillende delen van een applicatie (en zelfs vanuit meerdere applicaties). |
Prestaties | Opgeslagen procedures zorgen voor een snellere uitvoering van code en verminderen het netwerkverkeer.
|
Beveiliging | Gebruikers kunnen een opgeslagen procedure uitvoeren zonder de instructies direct uit te hoeven voeren. Daarom kan een opgeslagen procedure geavanceerde databasefunctionaliteit bieden voor gebruikers die normaal geen toegang hebben tot deze taken, maar deze functionaliteit wordt op een streng gecontroleerde manier beschikbaar gesteld. |
Een opgeslagen procedure maken
Gebruik de CREATE PROCEDURE
. om een opgeslagen procedure aan te maken statement, gevolgd door de code waaruit de opgeslagen procedure bestaat. Als uw opgeslagen procedure parameters accepteert, moeten deze achter de naam worden opgenomen.
CREATE PROCEDURE myStoredProcedure AS ... OR CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS ...
Voorbeeld
Hier is een voorbeeld van het maken van een opgeslagen procedure en het uitvoeren van die opgeslagen procedure.
-
Maak de opgeslagen procedure
Voer de volgende instructie uit voor de muziekdatabase die we in deze tutorial hebben gemaakt.
In dit voorbeeld wordt een opgeslagen procedure gemaakt met de naam AlbumsFromArtist. Het selecteert alle albums van een artiest die is opgegeven wanneer de opgeslagen procedure wordt uitgevoerd.
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
-
Bekijk de opgeslagen procedure
Vouw de Programmeerbaarheid> Opgeslagen procedures . uit knooppunt onder de toepasselijke database om uw nieuw gemaakte opgeslagen procedure te zien. U kunt ook de Parameters . van de opgeslagen procedure uitbreiden node om de parameters te zien die u moet doorgeven wanneer u het uitvoert.
-
Voer de opgeslagen procedure uit
Nu de opgeslagen procedure is gemaakt, kunt u deze uitvoeren met een
EXECUTE
statement en het doorgeven van de vereiste parameters.In ons voorbeeld moeten we de naam van de artiest doorgeven.
EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";
Als alternatief kunt u de parameternaam weglaten bij het doorgeven van parameters. Zoals dit:
EXECUTE spAlbumsFromArtist "Devin Townsend";
Een opgeslagen procedure wijzigen
U kunt uw opgeslagen procedure wijzigen met de ALTER PROCEDURE
uitspraak. Net als wanneer u een weergave wijzigt, kunt u een opgeslagen procedure wijzigen door simpelweg de nieuwe opgeslagen proceduredefinitie toe te passen.
-
Wijzig de opgeslagen procedure
Voer de volgende instructie uit. Dit voegt een nieuwe kolom toe aan de resultaten die door de opgeslagen procedure worden geretourneerd. We voegen ook aliassen toe aan de kolomnamen.
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
-
Voer de opgeslagen procedure uit
Nu we het
Genre
hebben toegevoegd kolom naar de weergave, de opgeslagen procedure retourneert nu die kolom wanneer we deze uitvoeren.EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";