–
Af: Greg Robidoux
Oversigt
Den reelle effekt af lagrede procedurer er evnen til at videregive parametre og havethe gemt procedure håndtere de forskellige anmodninger, der er foretaget. I thistopic vil vi se på at overføre parameterværdier til en gemt procedure.
forklaring
ligesom du har mulighed for at bruge parametre med din S .l-kode, kan du også indstille dine gemte procedurer for at acceptere en eller flere parameterværdier. Alleampamples bruger theadventure .orks database.,
Oprettelse af en SQL Stored Procedure med Parametre
- for At oprette en lagret procedure med parametre ved hjælp af følgende syntaks:
- CREATE PROCEDURE dbo.uspGetAddress @City nvarchar (30) som
- se detaljer og eksempler nedenfor
s .l-Serverforespørgsel for at blive en gemt Procedure
nedenfor er den forespørgsel, vi vil bruge til at oprette den gemte procedure.
USE AdventureWorksGOSELECT * FROM Person.AddressGO
ideen er at oprette den lagrede procedure, hvor byen overføres til den gemte procedure, så den kan skabe dynamiske resultater., Dette kan gøres som følger ved hjælp afen variabel. Hvis vi kører nedenstående KODE, Returnerer den kun resultaterne for Ne .york.
USE AdventureWorksGODECLARE @City nvarchar(30)SET @City = 'New York'SELECT * FROM Person.AddressWHERE City = @CityGO
Vi kunne bruge denne tilgang og fortsætte med at opdatere @City-variablen, men der er en bedre måde at gøre dette ved at oprette en gemt procedure.
Opret s .l Server gemt Procedure med en Parameter
i dette eksempel vil vi forespørge personen.Adressetabellen fra Adventureksorksdatabasen, men i stedet for at få alle poster tilbage, vil vi begrænse den til kun en bestemt by., Dette eksempel forudsætter, at der vil være en nøjagtig match på byens værdidet er bestået.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30)ASSELECT * FROM Person.AddressWHERE City = @CityGO
for At kalde dette er lagret procedure, vi ville udføre den som følger:
EXEC dbo.uspGetAddress @City = 'New York'
Sletning af en Lagret Procedure
Hvis du har oprettet, der er gemt procedure, og du ønsker at genskabe storedprocedure med samme navn, du kan slette det ved hjælp af den followingbefore forsøger at oprette den igen.
USE AdventureWorksGODROP PROCEDURE dbo.uspGetAddressGO
Hvis du forsøger at oprette den gemte procedure, og den allerede findes, får du en fejlmeddelelse.,
Der er allerede et objekt med navnet ‘uspGetAddress’ i databasen.
s .l Server gemt Procedure med Parameter ved hjælp af Wildildcard
Vi kan også gøre det samme, men giver brugerne mulighed for at give os et startpunktat søge i dataene.
Her kan vi ændre “=” til en lignende og bruge “%” wildildcard.
dette kan køres som følger for at finde alle byer, der starter med nye.,
EXEC dbo.uspGetAddress @City = 'New'
SQL Server Stored Procedure-Fejl, Når Parameter Ikke Bestået
I begge procedure eksempler antages det, at værdien af et parameter vil alwaysbe bestået. Hvis du forsøger at udføre den procedure, uden at passere en parametervalue vil du få en fejlmeddelelse som følgende:
EXEC dbo.uspGetAddress
Procedure eller funktion ‘uspGetAddress’ forventer parameter ‘@City’, whichwas medfølger ikke.,
s .l Server gemt Procedure ved hjælp af NULL som Standardparameter
i de fleste tilfælde er det altid en god praksis at videregive alle parameterværdier,men nogle gange er det ikke muligt. Så i dette eksempel bruger vi NULL-indstillingenfor at give dig mulighed for ikke at passere en parameterværdi. Hvis vi opretter og kører denne storedprocedure, som den er, Returnerer den ikke nogen data, fordi den leder efter nogen Cityvalues, der er lig med NULL.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30) = NULLASSELECT *FROM Person.AddressWHERE City = @CityGO
Hvis vi kører følgende, fungerer det, men ingen data returneres.,
EXEC dbo.uspGetAddress
Vi kunne ændre denne lagrede procedure og bruge ISNULL-funktionen til at komme rundt. Så hvis en værdi er bestået, vil den bruge værdien til at indsnævre resultatsættet, og hvis en værdi ikke er bestået, vil den returnere alle poster. (Bemærk: ifthe City kolonne har NULL værdier dette vil ikke omfatte disse værdier. Du vil haveat tilføje yderligere logik for byen er NULL)
nu, hvis vi kører nedenstående kommando, vil alle data blive returneret fra tabellen.,
EXEC dbo.uspGetAddress
Opret SQL Server Stored Procedure med Flere Parametre
oprettelse af flere parametre, der er meget let at gøre. Du skal bare listehver parameter og datatypen adskilt af et komma som vist nedenfor.
for at udføre dette kan du gøre et af følgende:
sidste opdatering: 4/3/2020