sql >> Database teknologi >  >> RDS >> Sqlserver

Opret en lagret procedure i SQL Server 2017

En lagret procedure er en gruppe af SQL-sætninger kompileret til én. Lagrede procedurer kan omfatte forretningslogik og andre programmeringskonstruktioner.

I SQL Server er en lagret procedure en gruppe af en eller flere Transact-SQL-sætninger eller en reference til en Microsoft .NET Framework Common Runtime Language-metode (CLR).

Programmerbarhed

En lagret procedure er mere end blot et langt script. Det er et script, der er blevet gemt i SQL Server specifikt under Storede procedurer node, og den kan:

  • Accepter inputparametre (og returner flere værdier i form af outputparametre til det kaldende program).
  • Indeholder programmeringserklæringer.
  • Returner en statusværdi til et opkaldsprogram for at indikere succes eller fiasko og årsagen til en eventuel fiasko.

Lagrede procedurer indeholder ofte forretningslogik. For eksempel kan en lagret procedure acceptere parametre, der sendes til den og teste mod disse parametre ved hjælp af IF udsagn. F.eks. hvis parameteren er én værdi, gør dette, hvis det er en anden værdi, gør det.

Lagrede procedurer kan forbedre ydeevnen i en applikation, fordi den lagrede procedure analyseres og optimeres, så snart den er oprettet, og derefter gemt i hukommelsen. At køre en betinget forespørgsel via lagret procedure kan være ekstremt hurtig - sammenlignet med en applikation, der sender en forespørgsel på tværs af netværket, til SQL Serveren, og derefter får alle data returneret til den på tværs af netværket, så den kan filtrere gennem den og vælge ud kun de poster, den er interesseret i.

Fordele ved lagrede procedurer

Her er nogle af de vigtigste fordele ved at bruge lagrede procedurer:

Fordel Forklaring
Modulær programmering Du kan skrive en lagret procedure én gang og derefter kalde den igen og igen fra forskellige dele af en applikation (og endda fra flere applikationer).
Ydeevne Lagrede procedurer giver hurtigere kodeudførelse og reducerer netværkstrafikken.
  • Hurtigere udførelse:Lagrede procedurer parses og optimeres, så snart de er oprettet, og den lagrede procedure gemmes i hukommelsen. Det betyder, at det vil køre meget hurtigere end at sende mange linjer SQL-kode fra din applikation til SQL Serveren. At gøre det kræver, at SQL Server kompilerer og optimerer din SQL-kode, hver gang den kører.
  • Reduceret netværkstrafik:Hvis du sender mange linjer SQL-kode over netværket til din SQL Server, vil dette påvirke netværkets ydeevne. Dette gælder især, hvis du har hundredvis af linjer SQL-kode og/eller du har masser af aktivitet på din applikation. Kørsel af koden på SQL Server (som en lagret procedure) eliminerer behovet for at sende denne kode over netværket. Den eneste netværkstrafik vil være de angivne parametre og resultaterne af enhver forespørgsel.
Sikkerhed Brugere kan udføre en lagret procedure uden at skulle udføre nogen af ​​sætningerne direkte. Derfor kan en lagret procedure give avanceret databasefunktionalitet til brugere, der normalt ikke ville have adgang til disse opgaver, men denne funktionalitet er gjort tilgængelig på en stramt kontrolleret måde.

Sådan opretter du en lagret procedure

For at oprette en lagret procedure, brug CREATE PROCEDURE sætning, efterfulgt af koden, der udgør den lagrede procedure. Hvis din lagrede procedure skal acceptere parametre, skal de inkluderes efter navnet.

CREATE PROCEDURE myStoredProcedure AS
...

OR

CREATE PROCEDURE myStoredProcedure @ParameterName DataType AS
...

Eksempel

Her er et eksempel på at oprette en lagret procedure og derefter udføre den lagrede procedure.

  1. Opret den lagrede procedure

    Kør følgende erklæring mod musikdatabasen, som vi har oprettet gennem denne øvelse.

    Dette eksempel opretter en lagret procedure kaldet AlbumsFromArtist. Den vælger alle album fra en kunstner, der er angivet, når den lagrede procedure kører.

    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. Se den lagrede procedure

    Udvid Programmerbarhed> Lagrede procedurer node under den relevante database for at se din nyoprettede lagrede procedure. Du kan også udvide den lagrede procedures parametre node for at se de parametre, du skal videregive, når du kører den.

  3. Udfør den lagrede procedure

    Nu hvor den lagrede procedure er blevet oprettet, kan du køre den ved at bruge en EXECUTE sætning og videregivelse af eventuelle nødvendige parametre.

    I vores eksempel skal vi videregive kunstnerens navn.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

    Alternativt kan du udelade parameternavnet, når du sender parametre. Sådan:

    EXECUTE spAlbumsFromArtist "Devin Townsend";

Ændre en lagret procedure

Du kan ændre din lagrede procedure med ALTER PROCEDURE udmelding. Ligesom når du ændrer en visning, kan du ændre en lagret procedure ved blot at anvende den nye definition af lagret procedure.

  1. Rediger den lagrede procedure

    Kør følgende erklæring. Dette tilføjer en ny kolonne til resultaterne, der returneres af den lagrede procedure. Vi tilføjer også aliaser til kolonnenavnene.

    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. Udfør den lagrede procedure

    Nu hvor vi har tilføjet Genre kolonne til visningen, returnerer den lagrede procedure nu den kolonne, når vi udfører den.

    EXECUTE spAlbumsFromArtist @ArtistName = "Devin Townsend";

  1. Hvordan finder man fremmednøgleafhængigheder i SQL Server?

  2. Oracle sql til at tælle forekomster af forskellige værdier i en enkelt kolonne

  3. Hvad er den anbefalede batchstørrelse for SqlBulkCopy?

  4. MySQL CRC32() Funktion – Eksempler