Od: Greg Robidoux
Přehled
skutečná síla uložené procedury je schopnost předat parametry a máte to uložené procedury zpracování odlišných požadavků, které jsou vyrobeny. V thistopic se podíváme na předávání hodnot parametrů uloženému postupu.
Vysvětlení
Stejně jako máte možnost použít parametry s SQL kódu můžete alsosetup vaše uložené procedury přijmout jednu nebo více hodnot parametrů. Allexamples používají databázi AdventureWorks.,
Vytváření SQL Uložené Procedury s Parametry
- vytvořit uloženou proceduru s parametry, pomocí následující syntaxe:
- CREATE procedure dbo.uspGetAddress @City nvarchar(30)
- zobrazit podrobnosti a příklady
SQL Server Query Proměnit v Uložené Postup
Níže je dotaz chceme použít k vytvoření uložená procedura.
USE AdventureWorksGOSELECT * FROM Person.AddressGO
myšlenka je vytvořit uložený postup, ve kterém je město předáno do uloženého postupu, aby mohlo vytvářet dynamické výsledky., To lze provést následujícím způsobemproměnná. Pokud spustíme níže uvedený kód, vrátí se pouze výsledky pro NewYork.
USE AdventureWorksGODECLARE @City nvarchar(30)SET @City = 'New York'SELECT * FROM Person.AddressWHERE City = @CityGO
tento přístup bychom mohli použít a aktualizovat proměnnou @City, ale existuje lepší způsob, jak to provést vytvořením uloženého postupu.
vytvořit SQL Server uložený postup s jedním parametrem
v tomto příkladu budeme dotazovat osobu.Tabulka adres z AdventureWorksdatabase, ale místo toho, abychom získali zpět všechny záznamy, omezíme je pouze na určitou oblast., Tento příklad předpokládá, že bude přesná shoda na hodnotách Městatak je předán.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30)ASSELECT * FROM Person.AddressWHERE City = @CityGO
volání uložené procedury bychom to provést takto:
EXEC dbo.uspGetAddress @City = 'New York'
Odstranění Uložené Procedury
Pokud jste vytvořili uložené procedury a chcete obnovit storedprocedure se stejným názvem, můžete ji odstranit pomocí followingbefore snaží vytvořit znovu.
USE AdventureWorksGODROP PROCEDURE dbo.uspGetAddressGO
Pokud se pokusíte vytvořit uložený postup a již existuje, zobrazí se chybová zpráva.,
v databázi je již objekt s názvem ‚uspGetAddress‘.
SQL Server uložený postup s parametrem pomocí zástupných znaků
můžeme také udělat totéž, ale umožnit uživatelům, aby nám výchozí bodpro vyhledávání dat.
zde můžeme změnit “ = „na podobně a použít zástupnou kartu“%“.
toto lze spustit následujícím způsobem, abyste našli všechna města, která začínají novým.,
EXEC dbo.uspGetAddress @City = 'New'
SQL Server Uložené Procedury Chyba, Když Parametr Není Prošel
V obou řízení příklady předpokládá, že hodnota parametru se vždycky budu prošel. Pokud se pokusíte provést postup bez absolvování parametervalue dostanete chybovou zprávu, jako například následující:
EXEC dbo.uspGetAddress
Procedura nebo funkce ‚uspGetAddress‘ očekává, že parametr ‚@City‘, která není součástí dodávky.,
SQL Server uložený postup pomocí NULL jako výchozí parametr
ve většině případů je vždy dobrou praxí předat všechny hodnoty parametrů, ale někdy to není možné. Takže v tomto příkladu používáme nulovou volbumožnit, abyste neprošli hodnotou parametru. Pokud vytvoříme a spustíme tento obchodprocedure, jak je, nevrátí žádná data, protože hledá nějaké Cityvalues, které se rovnají NULL.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30) = NULLASSELECT *FROM Person.AddressWHERE City = @CityGO
Pokud spustíme následující, bude to fungovat, ale žádná data nebudou vrácena.,
EXEC dbo.uspGetAddress
mohli bychom tento uložený postup změnit a pomocí funkce ISNULL se dostat kolemtento. Pokud je tedy hodnota předána, použije hodnotu k zúžení resultset a pokud hodnota není předána, vrátí všechny záznamy. (Poznámka: ifthe město sloupec má nulové hodnoty to nebude zahrnovat tyto hodnoty. Budete musetpřidat další logiku pro město je NULL)
Nyní pokud spustíme níže uvedený příkaz, všechna data budou vrácena z tabulky.,
EXEC dbo.uspGetAddress
Vytvořit SQL Server Uložené Procedury s Více Parametry
Nastavení více parametrů je velmi snadné dělat. Stačí si poslechnout každý parametr a datový typ oddělený čárkou, jak je uvedeno níže.
Chcete-li to provést, můžete provést některou z následujících možností:
Poslední aktualizace: 4/3/2020