Megosztás a következőn keresztül:


Tárolt eljárás végrehajtása

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database a Microsoft Fabric

Ez a cikk azt ismerteti, hogyan hajthat végre tárolt eljárásokat az SQL Server Management Studio vagy a Transact-SQL használatával az SQL Serverben.

A tárolt eljárások végrehajtásának különböző módjai vannak. Az első és leggyakoribb módszer az, hogy egy alkalmazás vagy felhasználó meghívja az eljárást. Egy másik módszer a tárolt eljárás automatikus futtatásának beállítása az SQL Server egy példányának indításakor.

Ha egy alkalmazás vagy felhasználó meghív egy eljárást, a Transact-SQL EXECUTE vagy EXEC kulcsszó explicit módon szerepel a hívásban. Az eljárás meghívható és végrehajtható az EXEC kulcsszó nélkül, ha az eljárás egy Transact-SQL köteg első utasítása.

Korlátozások

A hívó adatbázis-rendezés a rendszer eljárásneveinek egyeztetésekor használatos. Ezért mindig használja a rendszereljárások neveinek pontos esetét az eljáráshívásokban. Ez a kód például meghiúsul, ha egy kis- és nagybetűk megkülönböztetésével rendelkező adatbázis környezetében hajtják végre:

EXEC SP_heLP; -- Fails to resolve because SP_heLP doesn't equal sp_help  

A rendszereljárások pontos nevének megjelenítéséhez kérdezze le a sys.system_objects és sys.system_parameters katalógusnézeteket.

Ha egy felhasználó által definiált eljárás neve megegyezik a rendszereljárás nevével, előfordulhat, hogy a felhasználó által megadott eljárás soha nem lesz végrehajtva.

Ajánlások

A tárolt eljárások végrehajtásához használja az alábbi javaslatokat.

Rendszer által tárolt eljárások

A rendszer eljárásai a sp_előtaggal kezdődnek. Mivel logikailag minden felhasználó és rendszer által definiált adatbázisban logikailag megjelennek, a rendszereljárások bármely adatbázisból végrehajthatók anélkül, hogy teljes mértékben meg kellene határozniuk az eljárás nevét. A névütközések elkerülése érdekében azonban a legjobb, ha az összes rendszereljárásnevet sémanévvel minősíti a sys sémanévvel. Az alábbi példa egy rendszereljárás meghívásának ajánlott módszerét mutatja be.

EXEC sys.sp_who;  

Felhasználó által definiált tárolt eljárások

Felhasználó által definiált eljárás végrehajtásakor a legjobb, ha az eljárás nevét a sémanévvel minősíti. Ez a gyakorlat kis teljesítménynövekedést eredményez, mivel az adatbázismotornak nem kell több sémában keresnie. A sémanév használata megakadályozza a helytelen eljárás végrehajtását is, ha egy adatbázis több sémában azonos nevű eljárásokkal rendelkezik.

Az alábbi példák bemutatják a felhasználó által meghatározott eljárás végrehajtásához javasolt módszert. Ez az eljárás két bemeneti paramétert fogad el. A bemeneti és kimeneti paraméterek megadásáról további információt a Paraméterek megadása tárolt eljárásbancímű témakörben talál.

EXECUTE SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
GO

Vagy:

EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
GO  

Ha nem minősített felhasználó által definiált eljárás van megadva, az adatbázismotor a következő sorrendben keresi az eljárást:

  1. Az aktuális adatbázis sys sémája.

  2. A hívó alapértelmezett sémája, ha az eljárás kötegben vagy dinamikus SQL-ben fut. Ha a nem minősített eljárás neve egy másik eljárásdefiníció törzsében jelenik meg, a rendszer ezután megkeresi a másik eljárást tartalmazó sémát.

  3. Az aktuális adatbázis dbo sémája.

Biztonság

Biztonsági információ: EXECUTE AS (Transact-SQL) és EXECUTE AS záradék (Transact-SQL).

Engedélyek

Az engedélyekkel kapcsolatos információkért lásd az EXECUTE (Transact-SQL)dokumentáció Engedélyek szakaszát.

Tárolt eljárás végrehajtása

A tárolt eljárás végrehajtásához használhatja az SQL Server Management Studio (SSMS) felhasználói felületét vagy Transact-SQL egy SSMS-lekérdezési ablakban. Mindig az SSMS legújabb verzióját használja.

Az SQL Server Management Studio használata

  1. Az Object Explorer-ben csatlakozzon egy SQL Server vagy Azure SQL Database példányhoz, bontsa ki azt, majd bontsa ki az Adatbázisok-at.

  2. Bontsa ki a kívánt adatbázist, bontsa ki programozhatósági, majd bontsa ki tárolt eljárások.

  3. Kattintson a jobb gombbal a futtatni kívánt tárolt eljárásra, és válassza a Tárolt eljárás végrehajtásalehetőséget.

  4. Az Végrehajtási eljárás párbeszédpanelen Paraméter az egyes paraméterek nevét jelzi, Adattípus az adattípust, és Kimeneti paraméter azt jelzi, hogy kimeneti paraméter-e.

    Minden paraméterhez:

    • Az Értékterületen írja be a paraméterhez használni kívánt értéket.
    • A Null érték továbbításaterületen válassza ki, hogy a paraméter értékeként null értéket adjon-e át.
  5. Válassza OK lehetőséget a tárolt eljárás végrehajtásához. Ha a tárolt eljárás nem rendelkezik paraméterekkel, csak válassza OKlehetőséget.

    A tárolt eljárás fut, és az eredmények megjelennek az Eredmények panelen.

    Ha például a SalesLT.uspGetCustomerCompany tárolt eljárást a Tárolt eljárás létrehozása cikkből szeretné futtatni, adja meg Cannon a @LastName paraméterhez, és Chris a @FirstName paraméterhez, és válassza OKlehetőséget. Az eljárás visszaadja FirstNameChris, LastNameCannon, és CompanyNameKültéri Sportcikkek.

Transact-SQL használata lekérdezési ablakban

  1. Az SSMS-ben csatlakozzon az SQL Server vagy az Azure SQL Database egy példányához.

  2. Az eszköztáron válassza Új lekérdezéslehetőséget.

  3. Adjon meg egy EXECUTE utasítást a következő szintaxissal a lekérdezési ablakban, és adja meg az összes várt paraméter értékét:

    EXECUTE <ProcedureName> N'<Parameter 1 value>, N'<Parameter x value>;  
    GO  
    

    Az alábbi Transact-SQL utasítás például végrehajtja a uspGetCustomerCompany tárolt eljárást, a Cannon mint @LastName paraméterérték, és a Chris mint @FirstName paraméterérték.

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    GO  
    
  4. Az eszköztáron válassza a Végrehajtáslehetőséget. A tárolt eljárás fut.

Paraméterértékek beállításai

A tárolt eljárás VÉGREHAJTÁSI utasításaiban többféleképpen is megadhat paramétereket és értékeket. Az alábbi példák számos különböző lehetőséget mutatnak be az EXECUTE utasításhoz.

  • Ha a paraméterértékeket a tárolt eljárásban definiált sorrendben adja meg, nem kell megadnia a paraméterneveket. Például:

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    
  • Ha paraméterneveket ad meg a @parameter_name=value mintában, nem kell a paraméterneveket és az értékeket a definiált sorrendben megadnia. Például az alábbi utasítások bármelyike érvényes:

    EXEC SalesLT.uspGetCustomerCompany @FirstName = N'Chris', @LastName = N'Cannon';
    

    vagy:

    EXEC SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
    
  • Ha a @parameter_name=value űrlapot használja bármely paraméterhez, akkor azt az utasítás összes további paraméteréhez használnia kell. Például nem használhatja a EXEC SalesLT.uspGetCustomerCompany1 @FirstName = N'Chris', N'Cannon';.

Automatikus végrehajtás indításkor

A következőkre vonatkozik: SQL Server

Az SQL Serverben a sysadmin kiszolgálói szerepkör egy tagja sp_procoption használhatja az automatikus végrehajtás indításkor történő beállítására vagy törlésére. Az indítási eljárásoknak a master adatbázisban kell lenniük, a satulajdonában kell lenniük, és nem lehetnek bemeneti vagy kimeneti paraméterek. További információ: sp_procoption (Transact-SQL).

Az indításkor automatikus végrehajtásra megjelölt eljárások minden alkalommal lefutnak, amikor az SQL Server elindul, és a master adatbázis az indítási folyamat során helyreáll. Az automatikus végrehajtáshoz szükséges eljárások beállítása hasznos lehet adatbázis-karbantartási műveletek végrehajtásához vagy az eljárások folyamatos háttérfolyamatként való futtatásához.

Az automatikus végrehajtás másik célja, hogy az eljárás rendszer- vagy karbantartási feladatokat hajt végre tempdb-ban, például globális ideiglenes táblát hozni létre. Az automatikus végrehajtás biztosítja, hogy az ilyen ideiglenes tábla mindig létezik, amikor tempdb újra létre lesz hozva az SQL Server indítása során.

Az automatikusan végrehajtott eljárás ugyanazokkal az engedélyekkel működik, mint a sysadmin rögzített kiszolgálói szerepkör tagjai. Az eljárás által generált hibaüzenetek az SQL Server hibanaplójába írnak.

Nincs korlátozva az indítási eljárások száma, de minden indítási eljárás egy feldolgozó szálat használ a végrehajtás során. Ha több eljárást kell végrehajtania az indításkor, de nem kell párhuzamosan végrehajtania őket, hozzon létre egy eljárást indítási eljárásként, és hívja meg a többi eljárást. Ez a metódus csak egy feldolgozószálat használ.

Borravaló

Ne adjon vissza eredményhalmazt az automatikusan végrehajtott eljárásból. Mivel az eljárást az SQL Server hajtja végre egy alkalmazás vagy felhasználó helyett, az eredményhalmazok nem jutnak el.

Jegyzet

Az Azure SQL Database úgy lett kialakítva, hogy elkülönítse a funkciókat a master adatbázis függőségeitől. Ezért Transact-SQL kiszolgálószintű beállításokat konfiguráló utasítások nem érhetők el az Azure SQL-ben. Gyakran találhat más Azure-szolgáltatások, például Rugalmas feladatok vagy Azure Automationmegfelelő alternatíváit.

Automatikusan végrehajtandó eljárás beállítása indításkor

Csak a rendszergazda (sa) jelölhet meg egy automatikusan végrehajtandó eljárást.

  1. Az SSMS-ben csatlakozzon az adatbázismotorhoz.

  2. A Standard eszköztáron válassza Új lekérdezéslehetőséget.

  3. Adja meg a következő sp_procoption parancsokat az SQL Server indításakor automatikusan végrehajtandó tárolt eljárás beállításához.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'   
        , @OptionName = 'startup'   
        , @OptionValue = 'on';
    GO
    
  4. Az eszköztáron válassza a Végrehajtáslehetőséget.

Eljárás automatikus végrehajtásának leállítása indításkor

A sysadminsp_procoption használatával megakadályozhatja, hogy egy eljárás automatikusan végrehajtást hajtson végre az SQL Server indításakor.

  1. Az SSMS-ben csatlakozzon az adatbázismotorhoz.

  2. A Standard eszköztáron válassza Új lekérdezéslehetőséget.

  3. Írja be a következő parancsokat a lekérdezési ablakba.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'      
        , @OptionName = 'startup'
        , @OptionValue = 'off';
    GO
    
  4. Az eszköztáron válassza a Végrehajtáslehetőséget.