Microsoft SQL Server giver den lagrede proceduremekanisme for at forenkle databaseudviklingsprocessen ved at gruppere Transact-SQL-sætninger i håndterbare blokke. Lagrede procedurer værdsættes af de fleste SQL Server-udviklere, der finder de effektivitets- og sikkerhedsmæssige fordele, de høster, er værd at investere i forvejen i tide.
Fordele ved brug af lagrede procedurer
Hvorfor skal en udvikler bruge lagrede procedurer?
Her er de vigtigste fordele ved denne teknologi:
- Forkompileret udførelse: SQL Server kompilerer hver gemt procedure en gang og genbruger udførelsesplanen igen. Dette resulterer i enorm præstationsforøgelse, når lagrede procedurer kaldes gentagne gange.
- Reduceret klient / server trafik: Hvis netværkets båndbredde er et problem i dit miljø, vil du være glad for at lære, at lagrede procedurer kan reducere lange SQL-forespørgsler til en enkelt linje, der overføres over ledningen.
- Effektiv genbrug af kode og programmeringsabstraktion: Lagrede procedurer kan bruges af flere brugere og klientprogrammer. Hvis du udnytter dem på en planlagt måde, finder du udviklingscyklussen tager mindre tid.
- Forbedret sikkerhedskontrol: Du kan give brugerne tilladelse til at udføre en lagret procedure uafhængigt af underliggende bordtilladelser.
Lagrede procedurer svarer til brugerdefinerede funktioner, men der er diskrete forskelle.
Struktur
Lagrede procedurer ligner de konstruktioner, der ses på andre programmeringssprog.
De accepterer data i form af inputparametre, der er angivet på udførelsestidspunktet. Disse indgangsparametre (hvis implementeret) benyttes i udførelsen af en række udsagn, som giver noget resultat. Dette resultat returneres til det kaldende miljø ved hjælp af et recordset, output parametere og en returkode.
Det kan lyde som en mundfuld, men du vil opdage, at lagrede procedurer faktisk er ret enkle.
Eksempel
Lad os tage et kig på et praktisk eksempel relateret til den tabelopstillede oversigt vist nederst på denne side. Disse oplysninger opdateres i realtid, og lagerchefer kontrollerer løbende niveauet af produkter, der er lagret på deres lager og er tilgængelige for forsendelse. Tidligere ville hver leder køre spørgsmål svarende til følgende:
VELG produkt, mængdeFRA OpgørelseHVOR Lagerhus = 'FL'
Dette resulterede i ineffektiv ydeevne på SQL Server. Hver gang en lagerleder udførte forespørgslen, blev databaseserveren tvunget til at genkompilere forespørgslen og udføre den fra bunden. Det krævede også, at lageradministratoren havde kendskab til SQL og passende tilladelser for at få adgang til tabeloplysningerne.I stedet kan processen forenkles ved brug af en gemt procedure. Her er koden til en procedure kaldet sp_GetInventory, der henter lagerstyringsniveauet for et givet lager. Florida Warehouse Manager kan derefter få adgang til lagerniveauer ved at udstede kommandoen: Warehouse Manager i New York kan bruge den samme gemte procedure for at få adgang til områdets opgørelse: Indrømmet, dette er et simpelt eksempel, men fordelene ved abstraktion kan ses her. Lagerbehandleren behøver ikke at forstå SQL eller procedurens indre arbejde. Fra et præstationsperspektiv fungerer den lagrede procedure under. SQL Server opretter en eksekutionsplan en gang og genbruger den igen ved at tilslutte de relevante parametre på udførelsestidspunktet.Nu hvor du har lært fordelene ved lagrede procedurer, skal du komme ud og bruge dem. Prøv et par eksempler og måler de opnåede præstationsforbedringer - du vil blive forbløffet! Opgørelse tabelCREATE PROCEDURE sp_GetInventory@location varchar (10)SOMVELG produkt, mængdeFRA OpgørelseHvor lager = @location
EXECUTE sp_GetInventory 'FL'
EXECUTE sp_GetInventory 'NY'
ID Produkt Lager Antal 142 Grønne bønner NY 100 214 ærter FL 200 825 majs NY 140 512 Lima bønner NY 180 491 tomater FL 80 379 Vandmelon FL 85