–
Av: Greg Robidoux
Oversikt
Den reelle makten av lagrede prosedyrer er muligheten til å sende parametre og havethe lagret prosedyre håndtere de ulike krav som er gjort. I thistopic vi vil se på bestått parameterverdier til en lagret prosedyre.
Forklaring
Akkurat som du har muligheten til å bruke parametere med SQL-kode du kan alsosetup dine lagrede prosedyrer for å godta en eller flere parameter verdier. Allexamples bruk theAdventureWorks database.,
Opprette en SQL Lagret Prosedyre med Parametere
- for Å opprette en lagret prosedyre med parametere ved å bruke følgende syntaks:
- OPPRETT PROSEDYRE dbo.uspGetAddress @Byen nvarchar(30) SOM
- > Se detaljer og eksempler nedenfor
SQL Server-Spørring for å Slå inn en Lagret Prosedyre
Nedenfor er den spørringen vi ønsker å bruke til å opprette en lagret prosedyre.
USE AdventureWorksGOSELECT * FROM Person.AddressGO
ideen er å lage en lagret prosedyre der Byen er gått inn thestored prosedyren, så det kan skape dynamiske resultater., Dette kan gjøres som følger usinga variabel. Hvis vi kjører under koden vil det tilbake bare resultatene for new york.
USE AdventureWorksGODECLARE @City nvarchar(30)SET @City = 'New York'SELECT * FROM Person.AddressWHERE City = @CityGO
Vi kan bruke denne tilnærmingen, og holde oppdatere @Byen-variabel, men det isa bedre måte å gjøre dette ved å opprette en lagret prosedyre.
Opprett SQL Server Lagret Prosedyre med En Parameter
I dette eksempelet vil vi spørre den Personen.Adresse tabell fra AdventureWorksdatabase, men i stedet for å få tilbake alle poster vil vi begrense det til bare en particularcity., Dette eksempelet forutsetter at det vil være en eksakt match på Byen valuethat er passert.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30)ASSELECT * FROM Person.AddressWHERE City = @CityGO
for Å kalle dette en lagret prosedyre vi ville utføre det som følger:
EXEC dbo.uspGetAddress @City = 'New York'
Slette en Lagret Prosedyre
Hvis du opprettet en lagret prosedyre, og du ønsker å gjenopprette storedprocedure med samme navn, kan du slette det ved hjelp av followingbefore prøver å lage det igjen.
USE AdventureWorksGODROP PROCEDURE dbo.uspGetAddressGO
Hvis du prøver å opprette en lagret prosedyre, og det allerede eksisterer, vil du få en feilmelding.,
Det er allerede et objekt med navnet «uspGetAddress’ i databasen.
SQL Server Lagret Prosedyre med Parameteren ved å bruke Jokertegnet
Vi kan også gjøre det samme, men tillate brukere å gi oss en starter pointto søke etter data.
Her kan vi endre «=» hvis en LIKER og bruk «%» jokertegn.
Dette kan kjøres som følger for å finne alle Byer som starter med Nye.,
EXEC dbo.uspGetAddress @City = 'New'
SQL Server Lagret Prosedyre Feil Når Parameteren Ikke Bestått
I begge fortsetter eksempler det forutsetter at en parameter verdi vil alwaysbe bestått. Hvis du prøver å utføre prosedyren uten å passere en parametervalue vil du få en feilmelding, for eksempel følgende:
EXEC dbo.uspGetAddress
Prosedyre eller funksjon ‘uspGetAddress’ forventer parameter ‘@Byen», whichwas ikke er levert.,
SQL Server Lagret Prosedyre ved hjelp av NULL som Standard Parameter
I de fleste tilfeller er det alltid en god praksis for å passere i alle parameterverdier,men noen ganger er det ikke mulig. Så i dette eksempelet bruker vi NULL optionto tillate deg å ikke passere i en parameter verdi. Hvis vi oppretter og kjører denne storedprocedure som er det vil ikke returnere alle data, fordi det er på utkikk etter noen Cityvalues som lik NULL.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30) = NULLASSELECT *FROM Person.AddressWHERE City = @CityGO
Hvis vi kjører følgende vil det fungere, men ingen data vil bli returnert.,
EXEC dbo.uspGetAddress
Vi kan endre dette lagret prosedyre og bruk ISNULL-funksjonen for å få aroundthis. Så hvis en verdi er vedtatt vil den bruke verdien for å begrense resultset og hvis en verdi ikke er bestått, det vil returnere alle poster. (Merk: ifthe Byen kolonnen har NULL-verdier dette vil ikke omfatte disse verdiene. Vil du haveto legge ekstra logikk for Byen ER NULL)
hvis vi Nå kjøre under kommando, alle data vil bli returnert fra bordet.,
EXEC dbo.uspGetAddress
Opprett SQL Server Lagret Prosedyre med Flere Parametere
Sette opp flere parametre er veldig enkelt å gjøre. Du trenger bare å listeach parameter og data type, atskilt med komma, som vist nedenfor.
for Å utføre dette kan du gjøre ett av følgende:
Siste Oppdatering: 4/3/2020