SQL Server lagrade Procedurparametrar
i föregående handledning har du lärt dig hur du skapar en enkel lagrad procedur som sveper en SELECT
– sats. När du ringer den här lagrade proceduren kör den helt enkelt frågan och returnerar en resultatuppsättning.
i den här handledningen kommer vi att förlänga den lagrade proceduren som låter dig skicka ett eller flera värden till det. Resultatet av den lagrade proceduren ändras baserat på parametrarna för parametrarna.,Skapa en lagrad procedur med en parameter
följande fråga returnerar en produktlista från tabellen products
I provdatabasen:
Du kan skapa en lagrad procedur som sveper denna fråga med hjälp av uttalandet CREATE PROCEDURE
:
Code language: SQL (Structured Query Language) (sql)
den här gången kan vi dock lägga till en parameter i den lagrade proceduren för att hitta den lagrade produkter vars listpriser är högre än ett ingångspris:
i det här exemplet:
- först lade vi till en parameter som heter
@min_list_price
tilluspFindProducts
lagrade proceduren., Varje parameter måste börja med@
– tecknet. NyckelordenAS DECIMAL
anger datatypen för parametern@min_list_price
. Parametern måste omges av öppnings-och stängningsfästena. - för det andra använde vi
@min_list_price
– parametern iWHERE
– klausulen iSELECT
– satsen för att filtrera endast de produkter vars listpriser är högre än eller lika med@min_list_price
.,
utför en lagrad procedur med en parameter
för att utföra uspFindProducts
lagrad procedur skickar du ett argument till det enligt följande:
Code language: SQL (Structured Query Language) (sql)
den lagrade proceduren returnerar alla produkter vars listpriser är högre än eller lika med 100.,
om du ändrar argumentet till 200 får du en annan resultatuppsättning:
Code language: SQL (Structured Query Language) (sql)
skapa en lagrad procedur med flera parametrar
lagrade procedurer kan ta en eller flera parametrar. Parametrarna separeras med kommatecken.,iv> lagrad procedur genom att lägga till ytterligare en parameter som heter @max_list_price
till den:
När den lagrade proceduren har ändrats kan du köra den genom att skicka två argument, en för @min_list_price
och den andra för @max_list_price
:
Code language: SQL (Structured Query Language) (sql)
följande visar utmatningen:
använda namngivna parametrar
om lagrade procedurer har flera parametrar är det bättre och tydligare att utföra de lagrade procedurerna med namngivna parametrar.,
följande uttalande exekverar till exempeluspFindProducts
lagrad procedur med de angivna parametrarna@min_list_price
och@max_list_price
:
Code language: SQL (Structured Query Language) (sql)
resultatet av den lagrade proceduren är detsamma, men uttalandet är mer uppenbart.
skapa textparametrar
följande uttalande lägger till parametern@name
som en teckensträngsparameter till den lagrade proceduren.,
iWHERE
– klausulen iSELECT
– satsen lade vi till följande villkor:
Code language: SQL (Structured Query Language) (sql)
genom att göra detta returnerar den lagrade proceduren de produkter vars listpriser ligger inom intervallet för min-och max-listpriser och produktnamnen innehåller också en text som du skickar in.,
När den lagrade proceduren har ändrats kan du utföra den enligt följande:
i detta uttalande använde viuspFindProducts
lagrade proceduren för att hitta produkten vars listpriser ligger i intervallet 900 och 1000 och deras namn innehåller ordetTrek
.,
följande bild visar utmatningen:
skapa valfria parametrar
När du utföruspFindProducts
lagrade proceduren måste du skicka alla tre argument som motsvarar de tre parametrarna.
SQL Server kan du ange standardvärden för parametrar så att du kan hoppa över parametrarna med standardvärden när du anropar lagrade procedurer.,
se följande lagrade procedur:
i denna lagrade procedur tilldelade vi0
som standardvärde för parametern@min_list_price
och999,999
som standardvärde för parametern@max_list_price
.,
Once the stored procedure is compiled, you can execute it without passing the arguments to @min_list_price
and @max_list_price
parameters:
Code language: SQL (Structured Query Language) (sql)
In this case, the stored procedure used 0
for @min_list_price
parameter and 999,999
for the @max_list_price
parameter when it executed the query.,
parametrarna@min_list_price
och@max_list_price
kallas valfria parametrar.
naturligtvis kan du också skicka argumenten till de valfria parametrarna., Till exempel returnerar följande uttalande alla produkter vars listpriser är större eller lika med 6,000
och namnen innehåller ordet Trek
:
Code language: SQL (Structured Query Language) (sql)
använda null som standardvärde
i uspFindProducts
lagrade proceduren använde vi 999,999
som standard högsta Listpris. Detta är inte robust eftersom du i framtiden kan ha produkter med listpriserna som är större än så.,
en typisk teknik för att undvika detta är att användaNULL
som standardvärde för parametrarna:
iWHERE
– klausulen ändrade vi villkoret för att hanteraNULL
– värdet för parametern@max_list_price
:
Code language: SQL (Structured Query Language) (sql)
följande uttalande utföruspFindProducts
lagrad procedur för att hitta den produkt vars listpriser är större eller lika med 500 och namn innehåller ordetHaro
.,
Code language: SQL (Structured Query Language) (sql)
i den här handledningen har du lärt dig hur du skapar och utför lagrade procedurer med en eller flera parametrar. Du lärde dig också hur du skapar valfria parametrar och använder NULL som standardvärden för parametrarna.