Microsoft SQL Server gir den lagrede prosedyremekanismen for å forenkle databaseutviklingsprosessen ved å gruppere Transact-SQL-setninger i håndterbare blokker. Lagrede prosedyrer er verdsatt av de fleste SQL Server-utviklere som finner effektivitets- og sikkerhetsfordelene de høster, er vel verdt den forrige investeringen i tide.
Fordeler ved å bruke lagrede prosedyrer
Hvorfor skal en utvikler bruke lagrede prosedyrer?
Her er de viktigste fordelene ved denne teknologien:
- Forkompilert utførelse: SQL Server samler hver lagret prosedyre en gang, og gjenbruker deretter utførelsesplanen. Dette resulterer i enorm ytelsesforbedring når lagrede prosedyrer kalles gjentatte ganger.
- Redusert klient / server trafikk: Hvis nettverksbåndbredden er et problem i ditt miljø, vil du gjerne vite at lagrede prosedyrer kan redusere lange SQL-spørringer til en enkelt linje som overføres over ledningen.
- Effektiv gjenbruk av kode og programmeringsabstraksjon: Lagrede prosedyrer kan brukes av flere brukere og klientprogrammer. Hvis du bruker dem på en planlagt måte, vil du finne at utviklingssyklusen tar mindre tid.
- Forbedret sikkerhetskontroll: Du kan gi brukere tillatelse til å utføre en lagret prosedyre uavhengig av underliggende tabelltillatelser.
Lagrede prosedyrer ligner på brukerdefinerte funksjoner, men det er subtile forskjeller.
Struktur
Lagrede prosedyrer ligner konstruksjonene som er sett på andre programmeringsspråk.
De aksepterer data i form av inngangsparametere som er angitt på kjøretid. Disse inngangsparametrene (hvis implementert) benyttes i utførelsen av en serie utsagn som gir noe resultat. Dette resultatet returneres til det ringende miljøet ved bruk av et platesett, utgangsparametere og en returkode.
Det høres kanskje ut som en munnfull, men du finner at lagrede prosedyrer faktisk er ganske enkle.
Eksempel
La oss ta en titt på et praktisk eksempel relatert til tabellen med navnet, som vises nederst på denne siden. Denne informasjonen oppdateres i sanntid, og lagerforvaltere kontrollerer kontinuerlig nivået på produktene som er lagret på lageret og tilgjengelig for forsendelse. Tidligere har hver leder hatt spørsmål som ligner på følgende:
VELG produkt, mengdeFRA InventoryHvor lager = 'FL'
Dette resulterte i ineffektiv ytelse på SQL Server. Hver gang en lagerbehandler utførte spørringen, ble databaseserveren tvunget til å kompilere spørringen og utføre den fra bunnen av. Det var også pålagt lagerbehandleren å ha kunnskap om SQL og passende tillatelser for å få tilgang til tabellinformasjonen.I stedet kan prosessen forenkles ved bruk av en lagret prosedyre. Her er koden for en prosedyre kalt sp_GetInventory som henter lagernivåene for et gitt lager. Florida-lageradministratoren kan da få tilgang til lagernivå ved å utstede kommandoen: Lagerbehandleren i New York kan bruke samme lagrede prosedyre for å få tilgang til områdets beholdning: Gitt, dette er et enkelt eksempel, men fordelene med abstraksjon kan ses her. Lagerbehandleren trenger ikke å forstå SQL eller den indre arbeidet i prosedyren. Fra et ytelsesperspektiv arbeider den lagrede prosessen med underverk. SQL Server oppretter en utførelsesplan en gang og reutilizes den på nytt ved å plugge inn de riktige parametrene ved kjøretid.Nå som du har lært fordelene med lagrede prosedyrer, kom deg ut og bruk dem. Prøv noen eksempler og måle ytelsesforbedringer oppnådd - du vil bli overrasket! Inventory TableLag prosedyre sp_GetInventory@location varchar (10)SOMVELG produkt, mengdeFRA InventoryHvor lager = @location
EXECUTE sp_GetInventory 'FL'
EXECUTE sp_GetInventory 'NY'
ID Produkt Lager Mengde 142 Grønne bønner NY 100 214 erter FL 200 825 Korn NY 140 512 Lima bønner NY 180 491 tomater FL 80 379 Vannmelon FL 85