I denne blog vil vi diskutere lagrede procedurer i SQL, som du kan bruge til at gemme et sæt kode og bruge det gentagne gange, når du har brug for det. Lagrede procedurer ligner visninger. Du kan dog udføre som DROP, TRUNCATE, DELETE osv. med lagrede procedurer, som du ikke kan udføre med visninger.
Lagrede procedurer er også præ-kompileret, så det kører hurtigere end visninger. Det minimerer også mængden af data, der sendes til databaseserveren.
Indholdsfortegnelse
Syntaks for lagrede procedurer i SQL: Uden parametre
For at oprette en lagret procedure uden parametre, skal du starte med CREATE- funktionen. Tilføj derefter PROC- funktionen, skriv procedurenavnet lige efter, og tilføj AS -funktionen.

Oprettelse af en lagret procedure i svarer til at oprette tabeller og visninger. Forskellen er dog i processen med at få data.
For eksempel, hvis vi ønsker at hente data fra en visning, bruger vi " SELECT * FROM view_name ." På den anden side, til lagrede procedurer, bruger vi EXEC, som betyder "udfør", og skriv derefter navnet på den lagrede procedure efter.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Når vi udfører en lagret procedure , vil den også hente oplysningerne frem baseret på de instruktioner eller kommandoer, du har tilføjet.
Syntaks for lagrede procedurer i SQL: Med parametre
Lad os flytte til . Processen ligner det tidligere eksempel, som jeg demonstrerede. Den eneste forskel er, at du skal inkludere parametrene før AS- funktionen og også datatypen lige efter.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Du kan også bruge den parameter du har erklæret i oprettelsen af den lagrede procedure i dine kommandoer. Dette er for at du kan spare tid ved at indtaste flere værdier. For eksempel brugte vi @custid eller parameteren i stedet for manuelt at skrive customerID1 , customerID2 , og så videre for at undgå at have et langt sæt kode.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Bemærk venligst, at når du bruger eller inkluderer en parameter, er det vigtigt at bruge @ -symbolet. Du kan også inkludere så mange parametre, du vil, ikke kun én. Sådan udfører vi lagrede procedurer med parametre.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Som du kan bemærke, brugte vi også parameteren med en værdi lig med 1 til at udføre den lagrede procedure. Dette vil kun bringe oplysningerne fra custid1 .
Eksempelscenarie af lagrede procedurer i SSMS
Lad os få flere eksempler på lagrede procedurer i SQL. I første omgang vil jeg oprette et eksempel på en lagret procedure ved at bruge den fremhævede kommando nedenfor.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Til navngivningskonvention ved oprettelse af en lagret procedure, bruger vi normalt "usp" eller "sp" for at angive, at dette er en lagret procedure. Hvis du undrer dig over, hvad "usp" betyder, står det blot for brugerdefineret lagret procedure.
Dernæst skal vi skrive forespørgsler til den lagrede procedure, der skal behandles, når den udføres.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Forespørgslerne i det foregående eksempel vil simpelthen fjerne tabellen med navnet dbo.stageOrders . Derefter vil den genskabe dbo.stageOrders med dataene fra tabellen Sales.SalesOrderHeader .
Lad os oprette denne lagrede procedure ved at fremhæve følgende kode og klikke på knappen Udfør .
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Derefter skulle du se en besked som denne.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Så vil vi nu udføre den lagrede procedure ved at køre EXEC usp_TEST .
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Efter udførelse af den lagrede procedure usp_TEST skulle dbo.stageOrders nu have dataene fra Sales.SalesOrderHeader . Lad os tjekke indholdet af dbo.stageOrders ved at køre kommandoen nedenfor.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Som følge heraf er disse data, som vi oprettede i dbo.stageOrders baseret på de kommandoer, vi har tilføjet til vores lagrede procedure.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Andet eksempelscenarie
Lad os gå videre til et andet eksempel. Denne gang ønsker jeg ikke at droppe tabellen dbo.stageOrders og genskabe den samme tabel med data, der kommer fra tabellen Sales.SalesOrderHeader .
I stedet vil jeg bare have, at dataene fra Sales.SalesOrderHeader-tabellen skal vises, hver gang jeg udfører den lagrede procedure " usp_TEST " .
For at udføre dette skal jeg foretage ændringer i den nyligt oprettede lagrede procedure ved at bruge ALTER -sætningen.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
I dette eksempel brugte vi ALTER- sætningen, som bruges til at ændre vores lagrede procedure. Du kan også anvende dette på visninger og tabeller. Når vi har kørt koden i skærmbilledet ovenfor, skulle den ændre de forespørgsler, der skal behandles af vores lagrede procedure.
Denne gang vil den ikke genskabe nogen tabel, som vi gjorde tidligere. Hvis vi udfører " usp_TEST ," vil det blot bringe dataene fra tabellen Sales.SalesOrderHeader .
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Tredje eksempelscenarie
Lad os tage et andet eksempel. Denne gang genbruger vi tabellen dbo.stageOrders, som vi havde i vores første eksempel på oprettelse af en lagret procedure i SSMS . Vi starter med dette eksempel ved at vælge tabellen dbo.stageOrders.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Resultaterne ved valg af alle data fra dbo.stageOrders skulle være sådan her.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Lad os nu tømme tabellen dbo.stageOrders ved at udføre usp_TEST . Det kan vi gøre ved at tilføje følgende kommando.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Efter at have tilføjet kommandoen TRUNCATE TABLE , skal vi opdatere usp_TEST .
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Derefter skal der vises en meddelelse, der siger , at kommandoer er gennemført med succes . Så udfører vi usp_TEST igen.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Ved udførelse af usp_TEST vil den vise alle posterne fra Sales.SalesOrderHeader og også tømme tabellen dbo.stageOrders .
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
For at kontrollere, om tabellen dbo.stageOrders er tom, skal vi vælge den ved at bruge følgende kommando og udføre.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Når vi kører koden ovenfor, kan vi se, at dbo.stageOrders-tabellen nu er tom. Dette skyldes kommandoen TRUNCATE TABLE , som vi har brugt til at opdatere usp_TEST .
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Placering af gemte lagrede procedurer i SQL
Hvis du vil se, hvor den lagrede procedure bliver gemt, skal du gå til Objekt Explorer- panelet i venstre side og klikke på " + "-ikonet før den database, du arbejder på.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Højreklik derefter på Programmerbarhed og vælg Opdater .
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Udvid mappen eller gruppen Programmerbarhed ved at klikke på " + "-ikonet. Udvid derefter gruppen Stored Procedures ved at udføre det samme trin. Inde i gruppen Stored Procedures bør du se dbo.usp_TEST .
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Hvis du vil kontrollere, hvilke kommandoer eller forespørgsler en specifik lagret procedure i SQL udfører, kan du højreklikke på en lagret procedure og følge trinene i skærmbilledet nedenfor.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Derefter åbner den den lagrede procedure i en anden fane, hvor du kan se kommandoerne i den. Sådan ser dbo.usp_TEST ud, når den åbnes.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Som du kan se, er der nogle standardkommandoer før CREATE -sætningen. Du kan simpelthen slette det, hvis du vil.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Nu ved du, hvordan du kontrollerer, hvilke kommandoer en lagret procedure i SQL udfører.
Oprettelse af en lagret procedure i SQL med parametre
Dernæst skal vi oprette en lagret procedure med parametre. For eksempel vil vi bruge følgende kode til at oprette en ny lagret procedure.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
I eksempelkoden brugte jeg den samme proces til at oprette en lagret procedure ved navn usp_GetCustomer . Derefter tilføjede jeg en parameter, som er @CustomerID med inputtypen INT .
Bemærk, at når du først har tilføjet en parameter i oprettelsen af en lagret procedure, skal du altid angive en parameter, når du skal udføre en kommando.
Lad os se, hvad der vil ske, hvis vi udfører usp_GetCustomer uden at angive en parameter.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Ved udførelse af usp_GetCustomer uden en parameter, kom der en fejlmeddelelse. Sådan ville det se ud, hvis vi udfører usp_GetCustomer med en parameter.
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Med en parameter angivet, er vi i stand til at få et korrekt resultat i at udføre vores lagrede procedure .
Oprettelse af en lagret procedure med en standardværdi
Hvis du vil undgå at modtage en fejlmeddelelse ved udførelse af en lagret procedure med en parameter, kan du indstille en standardværdi, der vil fungere som en standardparameter.
For eksempel vil vi oprette en lagret procedure ved navn usp_GetOrdersByYear .
Så vil jeg tilføje en parameter @OrderYear med inputtypen " INT " og en standardværdi, der er lig med 2011 .
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Hvis vi udfører usp_GetOrdersByYear uden en parameter angivet, vil den vise poster med år 2011 .
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
På den anden side, hvis vi udfører usp_GetOrdersByYear med 2014 som en given parameter, skulle den vise poster med år 2014 .
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
![Lagrede procedurer i SQL | Et overblik Lagrede procedurer i SQL | Et overblik]()
Sådan udnytter du lagrede procedurer i dine daglige datahåndteringsopgaver.
Konklusion
Tager du alt i betragtning, har du lært, hvad en lagret procedure i SQL er og dens formål. Vi har også diskuteret ALTER- sætningen, der bruges til at foretage ændringer eller opdateringer i en nuværende lagret procedure.
Derudover har du lært, at der er forskellige metoder til at oprette lagrede procedurer i SQL og lært, hvordan du undgår at modtage fejl, når du udfører en lagret procedure ved at angive en standardværdi.
Vigtigst er det, at du har lært at bruge lagrede procedurer til at gemme sæt af kommandoer for at undgå at køre lange sæt kode gentagne gange. Som en sidste påmindelse, glem ikke at bruge " @ " symbolet, når du angiver en parameter.
Alt det bedste,
Hafiz