SQL Server Lagret Prosedyre med Parametere

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

  1. for Å opprette en lagret prosedyre med parametere ved å bruke følgende syntaks:
  2. OPPRETT PROSEDYRE dbo.uspGetAddress @Byen nvarchar(30) SOM
  3. > 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.,

Msg 2714 Nivå 16, Tilstand 3, Prosedyre uspGetAddress, Linje 1
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
Msg 201 Nivå 16, State 4, Prosedyre uspGetAddress, Line0
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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *