av: Greg Robidoux
översikt
den verkliga kraften i lagrade procedurer är möjligheten att skicka parametrar och Haden lagrade proceduren hanterar de olika förfrågningar som görs. I dettatopisk kommer vi att titta på att överföra parametervärden till en lagrad procedur.
förklaring
precis som du har möjlighet att använda parametrar med din SQL-kod kan du ocksåuppdatera dina lagrade procedurer för att acceptera ett eller flera parametervärden. Allexamples använder adventureworks-databasen.,
skapa en SQL-lagrad procedur med parametrar
- för att skapa en lagrad procedur med parametrar som använder följande syntax:
- skapa procedur dbo.USPGETADDRESS @City nvarchar(30) som
- se detaljer och exempel nedan
SQL Server fråga att förvandlas till en lagrad procedur
nedan är frågan vi vill använda för att skapa den lagrade proceduren.
USE AdventureWorksGOSELECT * FROM Person.AddressGO
tanken är att skapa den lagrade proceduren där staden passeras in iförhandlingen så att den kan skapa dynamiska resultat., Detta kan göras enligt följande använden variabel. Om vi kör nedanstående kod kommer det att returnera bara resultaten för NewYork.
USE AdventureWorksGODECLARE @City nvarchar(30)SET @City = 'New York'SELECT * FROM Person.AddressWHERE City = @CityGO
Vi kan använda detta tillvägagångssätt och fortsätta uppdatera @City-variabeln, men det finnsett bättre sätt att göra detta genom att skapa en lagrad procedur.
skapa SQL Server lagrad procedur med en Parameter
i det här exemplet kommer vi att fråga personen.Adresstabell från AdventureWorksdatabase, men istället för att få tillbaka alla poster kommer vi att begränsa det till bara en visshet., Detta exempel förutsätter att det kommer att finnas en exakt matchning på stadens värdeatt passeras.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30)ASSELECT * FROM Person.AddressWHERE City = @CityGO
för att kalla detta lagrade förfarande skulle vi utföra det enligt följande:
EXEC dbo.uspGetAddress @City = 'New York'
ta bort den lagrade proceduren
om du skapade den lagrade proceduren och du vill återskapa den lagrade proceduren med samma namn kan du ta bort den med hjälp av följandeinnan du försöker skapa det igen.
USE AdventureWorksGODROP PROCEDURE dbo.uspGetAddressGO
om du försöker skapa den lagrade proceduren och den redan finns får du ett felmeddelande.,
Det finns redan ett objekt som heter ”uspGetAddress” i databasen.
SQL Server lagrad procedur med Parameter med jokertecken
Vi kan också göra samma sak, men tillåta användarna att ge oss en utgångspunkt för att söka data.
Här kan vi ändra ”=” till en liknande och använda ”%” jokertecken.
detta kan köras enligt följande för att hitta alla städer som börjar med nya.,
EXEC dbo.uspGetAddress @City = 'New'
SQL Server lagrat procedurfel när parametern inte passerat
i båda exemplen på förfarandet förutsätter det att ett parametervärde alltid kommer att passeras. Om du försöker att köra proceduren utan att passera en parametervalue kommer du att få ett felmeddelande som följande:
EXEC dbo.uspGetAddress
Procedur eller funktion ’uspGetAddress” förväntar parametern ’@Staden”, whichwas medföljer inte.,
SQL Server lagrad procedur med NULL som Standardparameter
i de flesta fall är det alltid en bra praxis att passera i alla parametervärden,men ibland är det inte möjligt. Så i det här exemplet använder vi NULL-alternativetför att låta dig inte passera i ett parametervärde. Om vi skapar och kör detta lagradprocedur som är det kommer inte att returnera några data, eftersom det Letar efter några Cityvalues som lika NULL.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30) = NULLASSELECT *FROM Person.AddressWHERE City = @CityGO
om vi kör följande kommer det att fungera, men inga data kommer att returneras.,
EXEC dbo.uspGetAddress
Vi kan ändra den här lagrade proceduren och använda ISNULL-funktionen för att få rundthis. Så om ett värde skickas kommer det att använda värdet för att begränsa resultatset och om ett värde inte skickas kommer det att returnera alla poster. (Obs! Om stadskolumnen har nollvärden kommer detta inte att inkludera dessa värden. Du kommer att haatt lägga till ytterligare logik för staden är NULL)
Nu om vi kör kommandot nedan kommer alla data att returneras från tabellen.,
EXEC dbo.uspGetAddress
skapa SQL Server lagrad procedur med flera parametrar
ställa in flera parametrar är mycket lätt att göra. Du behöver bara listavarje parameter och datatypen separerad med ett kommatecken som visas nedan.
för att utföra detta kan du göra något av följande:
senaste uppdateringen: 4/3/2020