sql >> Database >  >> RDS >> Sqlserver

Een opgeslagen procedure maken in SQL Server 2017

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.
  • Sneller uitvoering:Opgeslagen procedures worden geparseerd en geoptimaliseerd zodra ze zijn gemaakt en de opgeslagen procedure wordt in het geheugen opgeslagen. Dit betekent dat het een stuk sneller zal worden uitgevoerd dan het verzenden van veel regels SQL-code van uw applicatie naar de SQL Server. Om dat te doen, moet SQL Server uw SQL-code elke keer dat deze wordt uitgevoerd, compileren en optimaliseren.
  • Gereduceerd netwerkverkeer:als u veel regels SQL-code via het netwerk naar uw SQL Server verzendt, heeft dit invloed op de netwerkprestaties. Dit is met name het geval als u honderden regels SQL-code hebt en/of veel activiteit op uw toepassing hebt. Het uitvoeren van de code op de SQL Server (als een opgeslagen procedure) elimineert de noodzaak om deze code over het netwerk te verzenden. Het enige netwerkverkeer zijn de opgegeven parameters en de resultaten van elke zoekopdracht.
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.

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

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

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

  1. Hoe het totale aantal geretourneerde rijen opnemen in de resultatenset van de opdracht SELECT T-SQL?

  2. Hoe verander ik het kolomtype in Heroku?

  3. Transactiebeheer met Django 1.6

  4. Maak een trigger die een kolom in de ene tabel bijwerkt wanneer een kolom in een andere tabel wordt bijgewerkt