Ismerkedés a Tárolt Eljárások az SQL Server

0 Comments

A: Greg Robidoux | Frissítve: 2020-07-30 | Hozzászólások (15) | Kapcsolódó: Több > Tárolt Eljárások

Probléma

már az SQL Server egy ideig, de a kód issuedagainst az adatbázis van ágyazva az alkalmazás kód. Tudom, hogy létrehozhatszállított eljárások, de nem vagyok pontosan biztos abban, hogy hol kezdjem, vagy mit kell Doto végrehajtani a tárolt eljárásokat.,

megoldás

A tárolt eljárások nem más, mint az adatbázisban tárolt T-SQL utasítások sorozata. Ahelyett, hogy több nyilatkozatot kellene kiadnia az alkalmazásodból, egy parancsot adhat ki a tárolt eljárás meghívására, hogy csak egy utasítás helyett elvégezze a munkát. Ezenkívül, mivel a kód vanaz adatbázisban tárolva ugyanazt a kódkészletet újra és újra kiadhatja. még különböző alkalmazásokból vagy lekérdezési ablakból is. Az induláshoz a tipp többi része megnézi, hogyan lehet elindítani, és hogyan lehet rájuk építeni.,

az alábbi példák megmutatják, milyen egyszerű a tárolt eljárások létrehozása. Mindezek a példák a adventureworks adatbázist használják, de ezeknek a példáknak elég egyértelműnek kell lenniük ahhoz, hogy ezeket a fogalmakat saját adatbázisaira és alkalmazásaira is alkalmazhassa.

1. példa-egyszerű tárolt eljárás

Ez az első példa egy egyszerű tárolt eljárást hoz létre, amely a felső 1 rekordot kapja meg a személytől.Kapcsolat táblázat.

CREATE PROCEDURE uspGetContact AS SELECT TOP 1 ContactID, FirstName, LastName FROM Person.Contact 

a fentiek létrehozása után használja az alábbi parancsot a storedprocedure végrehajtásához.,

EXEC uspGetContact

Ez az első lekérdezés eredménye.

2.példa – tárolt eljárás

paraméterrel ez a következő példa az első példa módosítása, de ezúttal hozzáadásegy paraméter, amelyet az eljárásba továbbítanak a rekordok dinamikus kiválasztásához.A CREATE PROCEDURE használata helyett az ALTER PROCEDURE-t használjuk az 1.példában létrehozott eljárás módosítására, ahelyett, hogy először eldobnánk, majd újra létrehoznánk.,

ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50) AS SELECT TOP 1 ContactID, FirstName, LastName FROM Person.Contact WHERE LastName = @LastName 

Az alábbiakban két különböző módon lehet futtatni a tárolt eljárást. Az első példa csak a használni kívánt paraméterértéket adja át, a második példa pedig a paraméter nevét is tartalmazza az értékkel együtt. A tárolt eljárást is futtathatjaezek a parancsok egyike.

EXEC uspGetContact "Alberts" EXEC uspGetContact @LastName="Alberts"

Ez az első lekérdezés eredménye.,

példa 3 – tárolt eljárás paraméterrel és kimeneti paraméterrel

ebben a példában mind bemeneti paraméterünk, mind kimeneti paraméterünk van.A kimeneti paraméter a ContactID visszaadására szolgál, amelyet a tárolt eljárás során keresünk. Ezt a kimeneti paramétert a contactid, az FirstName és a LastName karakterek kiválasztására használják, valamint az adott személy címrekordjait.,

ismét megváltoztatjuk a tárolt eljárást uspGetContact, majd másodszor Weare fut a következő sor kódot, amely végrehajtja eljárás uspGetContact és thenbased on the return value it gets it will also query for the persons name and 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 

a tárolt eljárás módosítása után futtassa az alábbi kódblokkot. Ez végrehajtja a fent tárolt eljárást, és ha a ContactID értéke van, akkor visszaadja a személy és a cím adatait is.

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 

Ez az eredmény.,

példa 4 – tárolt eljárás a RAISERROR utasítás

ebben a példában a 3.példa két lépését egyetlen tárolt eljárásba egyesítjük.Az első lépés az, hogy a ContactID, majd a második része az eljáráskeresni fogja a személyek nevét, címét info. Azt is hozzá kódot használni theRAISERROR nyilatkozatot, hogy visszatérjen a hiba, ha nincs rekordok találhatók.

ezt követően kétszer futtatják, hogy megmutassák, hogyan néz ki, amikor az adatokat megtalálják ésamikor nem található adat., A RAISERROR utasítás lehet használni, hogy ellenőrizzék, hogy a applicationhandles Nincs adat vagy bármilyen más hiba, ami előfordulhat.

ALTER PROCEDURE uspGetContact @LastName NVARCHAR(50) AS DECLARE @ContactID INT 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 IF @@ROWCOUNT > 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"

Ez az eredmény.

EXEC uspGetContact @LastName="Job"

Ez az eredmény, ha nincs adat.

példa 5 – tárolt eljárás egy külön hívás tárolt eljárás

itt van egy másik példa, ahol két tárolt eljárások., Az első storedprocedure uspFindContact lookups az első rekord, amely egy címet rekord ésakkor visszaadja a ContactID a hívás tárolt eljárást, hogy újra megjelenítse aperson és a cím 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 

az alábbi kód megváltoztatja az uspGetContact tárolt eljárást, amely felhívja auspfindcontact-ot, és visszaadja a rekordokat.

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"

Ez az eredmény.

EXEC uspGetContact @LastName="Job"

Ez az eredmény.,

példa 6 – tárolt eljárás megjegyzésekkel

Ez az utolsó példa az uspGetContact tárolt eljárást veszi fel, és hozzáadja a megjegyzéseketa kódhoz, így láthatja, hogyan működnek a megjegyzések egy tárolt eljáráson belül.

a Megjegyzések kétféle módon készíthetők:

  1. A —
  2. használatával/* a megjegyzésblokk elindításához és * / a megjegyzésblokk befejezéséhez.

más, mint hogy semmi más nem változott a tárolt eljárás.,

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 

ezek nagyon egyszerű példák, de remélhetőleg ez képet ad arról, hogyanegyszerű az SQL Server tárolt eljárásainak létrehozása. Ha futtathat egy kiválasztott kijelentéstegy lekérdezési ablakból vagy az alkalmazásból, ugyanolyan könnyen futtathatja az astored eljárást, mint a fenti.,

Következő Lépéseket
  • Ha már nem használja a tárolt eljárás, remélhetőleg ez ad egy kis betekintést, hogy mit kell tennie, hogy elkezdi használni őket
  • Mint említettük, ezek nagyon egyszerű példa, de bármit lehet csinálni egy adag kijelentéseket egyesített-ba egy tárolt eljárás aztán újra meg újra az alkalmazást.,
  • nézd meg thestored eljárás bemutató további példák

Utolsó frissítése: 2020-07-30

a szerzőről
Greg Robidoux Elnöke Edgewood Megoldások, valamint a társ-alapítója MSSQLTips.com.
az összes Megtekintése tippek
Kapcsolódó Források

  • Több Adatbázis Fejlesztő Tippek…


Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük