Začínáme s Uložené Procedury v SQL Server
Od: Greg Robidoux | Aktualizováno: 2020-07-30 | Komentáře (15) | Související: Více > Uložené Procedury
byl jsem pomocí SQL Server na nějakou dobu, ale všechny kód, který je issuedagainst databáze je embedded v kódu aplikace. Vím, že můžete vytvořituložené postupy, ale nejsem si úplně jistý, kde začít nebo co potřebuji k implementaci uložených postupů.,
řešení
uložené procedury nejsou ničím jiným než várkou příkazů T-SQL, které jsou uloženy v databázi. Místo toho, abyste museli vydat více příkazůvaše aplikace můžete vydat jeden příkaz k volání uloženého postupu k provedení práce namísto jediného příkazu. Kromě toho, protože je kóduložené v databázi, můžete znovu a znovu vydávat stejnou sadu kódudokonce i z různých aplikací nebo okna dotazu. Chcete-li začít, zbytek tohoto tipu se podívá na některévzorek uložené procedury a jak můžete začít a stavět na nich.,
níže uvedené příklady ukazují, jak jednoduché je vytvořit uložené postupy. Allof tyto příklady používajíadventureworks databáze, ale tytopříklady by měly být docela přímočaréže tyto koncepty můžete aplikovat na své vlastní databáze a aplikace.
Příklad 1-jednoduchý uložený postup
Tento první příklad vytvoří jednoduchý uložený postup, který získá horní 1 záznamod osoby.Kontaktní tabulka.
CREATE PROCEDURE uspGetContact AS SELECT TOP 1 ContactID, FirstName, LastName FROM Person.Contact
Po výše uvedené byl vytvořen použijte níže uvedený příkaz ke spuštění tohoto storedprocedure.,
EXEC uspGetContact
toto jsou výsledky tohoto prvního dotazu.
Příklad 2 – uložené procedury s parametrem
Tento druhý příklad je modifikací prvního příkladu, ale tentokrát addinga parametr, který je předán do procedury dynamicky vyberte záznamy.Namísto použití VYTVOŘIT POSTUP jsme pomocí ALTER POSTUP upravit procedurethat jsme vytvořili v Příkladu 1 místo vrácení to první a pak obnovovat.,
ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50) AS SELECT TOP 1 ContactID, FirstName, LastName FROM Person.Contact WHERE LastName = @LastName
níže ukazuje dva různé způsoby, jak lze uložený postup spustit. První příklad předává hodnotu parametru, kterou chceme použít, a druhý příklad také obsahuje název parametru spolu s hodnotou. Uložený postup můžete spustit buďjeden z těchto příkazů.
EXEC uspGetContact "Alberts" EXEC uspGetContact @LastName="Alberts"
toto jsou výsledky tohoto prvního dotazu.,
Příklad 3 – uložené procedury s parametrem a výstupní parametr
V tomto příkladu máme oba vstupní parametr, stejně jako VÝSTUPNÍ parametr.Výstupní parametr bude použit k předání ContactID, který hledáme v uloženém postupu. Tento výstupní parametr pak bude použit k výběru ContactID, FirstName a LastName spolu s libovolnými adresními záznamy pro thispersons.,
Opět jsme se změnit uložené procedury uspGetContact a pak za druhé jsme běží další sadu kódu, který provede postup uspGetContact a thenbased na návratovou hodnotu to získá, bude to také dotaz na jméno osoby a addressinfo.
ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50), @ContactID INT output AS SELECT TOP 1 @ContactID = c.ContactID FROM HumanResources.Employee a INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID INNER JOIN Person.Contact c ON a.ContactID = c.ContactID INNER JOIN Person.Address d ON b.AddressID = d.AddressID WHERE c.LastName = @LastName
po změně uloženého postupu spusťte níže uvedený blok kódu. Tím se provede výše uvedený uložený postup a pokud má ContactID hodnotu, vrátí se také informace o osobě a adrese.
DECLARE @ContactID INT SET @ContactID = 0 EXEC uspGetContact @LastName="Smith", @ OUTPUT IF @ContactID <> 0 BEGIN SELECT ContactID, FirstName, LastName FROM Person.Contact WHERE ContactID = @ContactID SELECT d.AddressLine1, d.City, d.PostalCode FROM HumanResources.Employee a INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID INNER JOIN Person.Contact c ON a.ContactID = c.ContactID INNER JOIN Person.Address d ON b.AddressID = d.AddressID WHERE c.ContactID = @ContactID END
toto jsou výsledky.,
Příklad 4 – uložené procedury pomocí RAISERROR
V tomto příkladu jsme, že kombinuje dva kroky v Příkladu 3 do jedné uložené procedury.Prvním krokem je získat ContactID a pak druhá část procesubude vyhledávání osob jméno a adresu info. Také jsme přidali v kódu použít theraiserror prohlášení vrátit chybu, pokud nejsou nalezeny žádné záznamy.
toto se pak spustí dvakrát, aby se ukázalo, jak to vypadá, když jsou data nalezena akdyž nejsou nalezena žádná data., Prohlášení RAISERROR lze použít k ovládání toho, jak vaše aplikacezavírá Žádná data nebo jakoukoli jinou chybu, která může nastat.
EXEC uspGetContact @LastName="Walters"
toto jsou výsledky.
EXEC uspGetContact @LastName="Job"
toto jsou výsledky, pokud nejsou nalezena žádná data.
Příklad 5 – uložené procedury s oddělenou volání uložené postup
Zde je další příklad, kde máme dvě uložené procedury., První storedprocedure uspFindContact vyhledávání první záznam, který má adresu záznam a vrátí ContactID k volání uložené procedury k znovu zobrazení toho a adresa info.
CREATE PROCEDURE uspFindContact @LastName NVARCHAR(50), @ContactID INT output AS SELECT TOP 1 @ContactID = c.ContactID FROM HumanResources.Employee a INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID INNER JOIN Person.Contact c ON a.ContactID = c.ContactID INNER JOIN Person.Address d ON b.AddressID = d.AddressID WHERE c.LastName = @LastName
níže uvedený kód mění uspGetContact uložený postup, který voláuspfindcontact a vrací záznamy.
ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50) AS DECLARE @ContactID INT SET @ContactID = 0 EXEC uspFindContact @, @ OUTPUT IF @ContactID <> 0 BEGIN SELECT ContactID, FirstName, LastName FROM Person.Contact WHERE ContactID = @ContactID SELECT d.AddressLine1, d.City, d.PostalCode FROM HumanResources.Employee a INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID INNER JOIN Person.Contact c ON a.ContactID = c.ContactID INNER JOIN Person.Address d ON b.AddressID = d.AddressID WHERE c.ContactID = @ContactID END ELSE BEGIN RAISERROR ("No record found",10,1) END
EXEC uspGetContact @LastName="Walters"
toto jsou výsledky.
EXEC uspGetContact @LastName="Job"
toto jsou výsledky.,
Příklad 6 – uložené procedury s komentáře
Tento poslední příklad bere uspGetContact uložené procedury a dodává commentsto kód, takže můžete vidět, jak připomínky práce v rámci uložené procedury.
Komentáře lze provést dvěma způsoby
- pomocí —
- pomocí / * pro zahájení bloku komentářů a * / pro ukončení bloku komentářů.
kromě toho, že se v uloženém postupu nic jiného nezměnilo.,
ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50) AS /* This is a sample stored procedure to show how comments work within a stored procedure */ -- declare variable DECLARE @ContactID INT -- set variable value SET @ContactID = 0 -- execute stored proc and return ContactID value EXEC uspFindContact @, @ OUTPUT -- if ContactID does not equal 0 then return data else return error IF @ContactID <> 0 BEGIN SELECT ContactID, FirstName, LastName FROM Person.Contact WHERE ContactID = @ContactID SELECT d.AddressLine1, d.City, d.PostalCode FROM HumanResources.Employee a INNER JOIN HumanResources.EmployeeAddress b ON a.EmployeeID = b.EmployeeID INNER JOIN Person.Contact c ON a.ContactID = c.ContactID INNER JOIN Person.Address d ON b.AddressID = d.AddressID WHERE c.ContactID = @ContactID END ELSE BEGIN RAISERROR ("No record found",10,1) END
jedná se o velmi jednoduché příklady, ale doufejme, že vám to dává představu o tom, jak snadné je vytvořit uložené procedury pro SQL Server. Pokud můžete spustit výběr prohlášeníod okna dotazu nebo z aplikace můžete stejně snadno spustit astored postup, jak je uvedeno výše.,
Další Kroky,
- Pokud si nejste již používáte uložené procedury doufejme, že to dává poskytnout nějakou představu o tom, co je třeba udělat, aby začít používat
- Jak již bylo zmíněno, tyto jsou docela jednoduché příklady, ale jen o něco, co můžete dělat s dávkové výkazy mohou být kombinovány do uložené procedury a potom použít znovu a znovu pro vaše aplikace.,
- Podívejte se na thestored postup návod pro další příklady
Poslední aktualizace: 2020-07-30
O autorovi
Zobrazit všechny mé tipy
- Více Databáze Vývojka Tipy…