sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa en lagrad procedur i SQL Server 2017

En lagrad procedur är en grupp SQL-satser kompilerade till en. Lagrade procedurer kan inkludera affärslogik och andra programmeringskonstruktioner.

I SQL Server är en lagrad procedur en grupp av en eller flera Transact-SQL-satser eller en referens till en Microsoft .NET Framework common runtime language (CLR)-metod.

Programmerbarhet

En lagrad procedur är mer än bara ett långt skript. Det är ett skript som har sparats i SQL Server specifikt under Lagrade procedurer nod, och den kan:

  • Acceptera indataparametrar (och returnera flera värden i form av utdataparametrar till det anropande programmet).
  • Innehåller programmeringsförklaringar.
  • Återställ ett statusvärde till ett anropsprogram för att indikera framgång eller misslyckande och orsaken till eventuella misslyckanden.

Lagrade procedurer innehåller ofta affärslogik. Till exempel kan en lagrad procedur acceptera parametrar som skickas till den och testa mot dessa parametrar med IF uttalanden. T.ex. om parametern är ett värde, gör detta, om det är ett annat värde, gör det.

Lagrade procedurer kan förbättra prestandan i en applikation, eftersom den lagrade proceduren analyseras och optimeras så snart den skapas och sedan lagras i minnet. Att köra en villkorlig förfrågan via lagrad procedur kan vara extremt snabbt - jämfört med en applikation som skickar en förfrågan över nätverket, till SQL-servern, och sedan får all data tillbaka till den över nätverket så att den kan filtrera igenom den och välja ut endast de skivor den är intresserad av.

Fördelar med lagrade procedurer

Här är några av de viktigaste fördelarna med att använda lagrade procedurer:

Förmån Förklaring
Modulär programmering Du kan skriva en lagrad procedur en gång och sedan anropa den igen och igen, från olika delar av en applikation (och till och med från flera applikationer).
Prestanda Lagrade procedurer ger snabbare kodexekvering och minskar nätverkstrafiken.
  • Snabbare exekvering:Lagrade procedurer analyseras och optimeras så snart de skapas och den lagrade proceduren lagras i minnet. Detta innebär att det kommer att köras mycket snabbare än att skicka många rader SQL-kod från din applikation till SQL Server. Att göra det kräver att SQL Server kompilerar och optimerar din SQL-kod varje gång den körs.
  • Minskad nätverkstrafik:Om du skickar många rader SQL-kod över nätverket till din SQL Server kommer detta att påverka nätverkets prestanda. Detta gäller särskilt om du har hundratals rader SQL-kod och/eller om du har mycket aktivitet på din applikation. Att köra koden på SQL Server (som en lagrad procedur) eliminerar behovet av att skicka denna kod över nätverket. Den enda nätverkstrafiken kommer att vara parametrarna som tillhandahålls och resultaten av alla frågor.
Säkerhet Användare kan köra en lagrad procedur utan att behöva köra någon av satserna direkt. Därför kan en lagrad procedur tillhandahålla avancerad databasfunktionalitet för användare som normalt inte skulle ha tillgång till dessa uppgifter, men denna funktionalitet görs tillgänglig på ett hårt kontrollerat sätt.

Hur man skapar en lagrad procedur

För att skapa en lagrad procedur, använd CREATE PROCEDURE uttalande, följt av koden som utgör den lagrade proceduren. Om din lagrade procedur ska acceptera parametrar måste de inkluderas efter namnet.

CREATE PROCEDURE myStoredProcedure AS
...

OR

CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS
...

Exempel

Här är ett exempel på att skapa en lagrad procedur och sedan exekvera den lagrade proceduren.

  1. Skapa den lagrade proceduren

    Kör följande uttalande mot musikdatabasen som vi har skapat genom denna handledning.

    Detta exempel skapar en lagrad procedur som kallas AlbumsFromArtist. Den väljer alla album från en artist som anges när den lagrade proceduren körs.

    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. Visa den lagrade förfarandet

    Expandera Programmerbarhet> Lagrade procedurer nod under den tillämpliga databasen för att se din nyskapade lagrade procedur. Du kan också utöka den lagrade procedurens parametrar nod för att se parametrarna du måste skicka när du kör den.

  3. Utför den lagrade proceduren

    Nu när den lagrade proceduren har skapats kan du köra den genom att använda en EXECUTE och skicka alla nödvändiga parametrar.

    I vårt exempel måste vi skicka artistens namn.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

    Alternativt kan du utelämna parameternamnet när du skickar parametrar. Så här:

    EXECUTE spAlbumsFromArtist "Devin Townsend";

Ändra en lagrad procedur

Du kan ändra din lagrade procedur med ALTER PROCEDURE påstående. Precis som när du ändrar en vy, kan du ändra en lagrad procedur genom att helt enkelt tillämpa den nya lagrade procedurdefinitionen.

  1. Ändra den lagrade proceduren

    Kör följande uttalande. Detta lägger till en ny kolumn till resultaten som returneras av den lagrade proceduren. Vi lägger också till alias till kolumnnamnen.

    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. Utför den lagrade proceduren

    Nu när vi har lagt till Genre kolumnen till vyn, returnerar den lagrade proceduren nu den kolumnen när vi kör den.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

  1. PostgreSQL:Skiftlägesokänslig strängjämförelse

  2. Inaktivera tillfälligt alla begränsningar för främmande nyckel

  3. Varför är det uppskattade radantalet väldigt olika i phpmyadmin-resultaten?

  4. Varför (och hur) dela kolumnen med master..spt_values?