Een opgeslagen procedure uitvoeren
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-database in Microsoft Fabric
In dit artikel wordt beschreven hoe u een opgeslagen procedure uitvoert in SQL Server met behulp van SQL Server Management Studio of Transact-SQL.
Er zijn verschillende manieren om een opgeslagen procedure uit te voeren. De eerste en meest voorkomende benadering is dat een toepassing of gebruiker de procedure kan aanroepen. Een andere methode is het instellen van de opgeslagen procedure die automatisch wordt uitgevoerd wanneer een exemplaar van SQL Server wordt gestart.
Wanneer een procedure wordt aangeroepen door een toepassing of gebruiker, wordt het trefwoord Transact-SQL EXECUTE of EXEC expliciet vermeld in de aanroep. De procedure kan worden aangeroepen en uitgevoerd zonder het EXEC-trefwoord als de procedure de eerste instructie is in een Transact-SQL batch.
Beperkingen en beperkingen
De collatie van de aanroepende database wordt gebruikt bij het vergelijken van systeemprocedurenamen. Gebruik daarom altijd het exacte geval van systeemprocedurenamen in procedureoproepen. Deze code mislukt bijvoorbeeld als deze wordt uitgevoerd in de context van een database met een hoofdlettergevoelige sortering:
EXEC SP_heLP; -- Fails to resolve because SP_heLP doesn't equal sp_help
Als u de exacte systeemprocedurenamen wilt weergeven, voert u een query uit op de sys.system_objects- en sys.system_parameters catalogusweergaven.
Als een door de gebruiker gedefinieerde procedure dezelfde naam heeft als een systeemprocedure, kan de door de gebruiker gedefinieerde procedure nooit worden uitgevoerd.
Aanbevelingen
Gebruik de volgende aanbevelingen voor het uitvoeren van opgeslagen procedures.
Door het systeem opgeslagen procedures
Systeemprocedures beginnen met het voorvoegsel sp_
. Omdat ze logisch worden weergegeven in alle door de gebruiker en het systeem gedefinieerde databases, kunnen systeemprocedures worden uitgevoerd vanuit elke database zonder dat ze volledig in aanmerking hoeven te komen voor de naam van de procedure. Het is echter het beste om alle systeemprocedurenamen te kwalificeren met de sys
schemanaam om naamconflicten te voorkomen. In het volgende voorbeeld ziet u de aanbevolen methode voor het aanroepen van een systeemprocedure.
EXEC sys.sp_who;
Door de gebruiker gedefinieerde opgeslagen procedures
Wanneer u een door de gebruiker gedefinieerde procedure uitvoert, kunt u de procedurenaam het beste kwalificeren met de schemanaam. Deze procedure biedt een kleine prestatieverbeteringen omdat de database-engine niet meerdere schema's hoeft te doorzoeken. Als u de schemanaam gebruikt, voorkomt u ook dat de verkeerde procedure wordt uitgevoerd als een database procedures met dezelfde naam in meerdere schema's heeft.
In de volgende voorbeelden ziet u de aanbevolen methode voor het uitvoeren van een door de gebruiker gedefinieerde procedure. Deze procedure accepteert twee invoerparameters. Zie Parameters opgeven in een opgeslagen procedurevoor meer informatie over het opgeven van invoer- en uitvoerparameters.
EXECUTE SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
GO
Of:
EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
GO
Als er een niet-gekwalificeerde door de gebruiker gedefinieerde procedure is opgegeven, zoekt de database-engine in de volgende volgorde naar de procedure:
Het
sys
schema van de huidige database.Het standaardschema van de aanroeper als de procedure wordt uitgevoerd in een batch of in dynamische SQL. Als de naam van de niet-gekwalificeerde procedure in de hoofdtekst van een andere proceduredefinitie wordt weergegeven, wordt het schema met deze andere procedure vervolgens doorzocht.
Het
dbo
schema in de huidige database.
Veiligheid
Voor beveiligingsinformatie, zie EXECUTE AS (Transact-SQL) en EXECUTE AS-clausule (Transact-SQL).
Machtigingen
Voor informatie over machtigingen, zie Machtigingen in EXECUTE (Transact-SQL).
Uitvoering van opgeslagen procedure
U kunt de SQL Server Management Studio (SSMS) gebruikersinterface of Transact-SQL in een SSMS-queryvenster gebruiken om een opgeslagen procedure uit te voeren. Gebruik altijd de nieuwste versie van SSMS.
SQL Server Management Studio gebruiken
Maak in Objectverkennerverbinding met een exemplaar van SQL Server of Azure SQL Database, vouw dat exemplaar uit en vouw vervolgens Databasesuit.
Vouw de gewenste database uit, vouw Programmeerbaarheiduit en vouw opgeslagen proceduresuit.
Klik met de rechtermuisknop op de opgeslagen procedure die u wilt uitvoeren en selecteer Opgeslagen procedure uitvoeren.
In het dialoogvenster Procedure uitvoeren geeft parameter de naam van elke parameter aan, gegevenstype het gegevenstype aan en uitvoerparameter aangeeft of het een uitvoerparameter is.
Voor elke parameter:
- Typ onder Waardede waarde die u voor de parameter wilt gebruiken.
- Selecteer onder Null-waarde doorgevenof u een NULL als de waarde van de parameter wilt doorgeven.
Selecteer OK- om de opgeslagen procedure uit te voeren. Als de opgeslagen procedure geen parameters heeft, selecteert u OK.
De opgeslagen procedure wordt uitgevoerd en de resultaten worden weergegeven in het deelvenster Resultaten.
Als u bijvoorbeeld de opgeslagen procedure
SalesLT.uspGetCustomerCompany
wilt uitvoeren vanuit het artikel Een opgeslagen procedure maken, voert u Cannon in voor de parameter @LastName en Chris voor de parameter @FirstName, en selecteert u OK. De procedure retourneertFirstName
Chris,LastName
CannonenCompanyName
Outdoor Sporting Goods.
Transact-SQL gebruiken in een queryvenster
Maak in SSMS verbinding met een exemplaar van SQL Server of Azure SQL Database.
Selecteer in de werkbalk Nieuwe query.
Voer een EXECUTE-instructie met de volgende syntaxis in het queryvenster in en geef waarden op voor alle verwachte parameters:
EXECUTE <ProcedureName> N'<Parameter 1 value>, N'<Parameter x value>; GO
Met de volgende Transact-SQL-instructie wordt bijvoorbeeld de
uspGetCustomerCompany
opgeslagen procedure uitgevoerd, metCannon
als parameterwaarde van@LastName
enChris
als parameterwaarde van@FirstName
.EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris'; GO
Selecteer uitvoeren in de werkbalk. De opgeslagen procedure wordt uitgevoerd.
Opties voor parameterwaarden
Er zijn meerdere manieren om parameters en waarden op te geven in opgeslagen procedure EXECUTE-instructies. In de volgende voorbeelden ziet u verschillende opties voor de EXECUTE-instructie.
Als u de parameterwaarden in dezelfde volgorde opgeeft als die in de opgeslagen procedure zijn gedefinieerd, hoeft u de parameternamen niet op te geven. Bijvoorbeeld:
EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
Als u parameternamen opgeeft in het
@parameter_name=value
patroon, hoeft u de parameternamen en -waarden niet in dezelfde volgorde op te geven als ze zijn gedefinieerd. Bijvoorbeeld, beide van de volgende uitspraken zijn geldig:EXEC SalesLT.uspGetCustomerCompany @FirstName = N'Chris', @LastName = N'Cannon';
of:
EXEC SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
Als u het formulier
@parameter_name=value
voor een parameter gebruikt, moet u deze gebruiken voor alle volgende parameters in die instructie. U kunt bijvoorbeeldEXEC SalesLT.uspGetCustomerCompany1 @FirstName = N'Chris', N'Cannon';
niet gebruiken.
Automatische uitvoering bij opstarten
van toepassing op: SQL Server
In SQL Server kan een lid van de sysadmin
-serverfunctie sp_procoption gebruiken om een procedure in te stellen of te wissen voor automatische uitvoering bij het opstarten. Opstartprocedures moeten zich in de master
-database bevinden, moeten eigendom zijn van sa
en kunnen geen invoer- of uitvoerparameters hebben. Zie sp_procoption (Transact-SQL)voor meer informatie.
Procedures die zijn gemarkeerd voor automatische uitvoering tijdens het opstarten worden uitgevoerd telkens wanneer SQL Server wordt gestart en de master
database wordt hersteld tijdens dat opstartproces. Het instellen van procedures die automatisch moeten worden uitgevoerd, kan handig zijn voor het uitvoeren van databaseonderhoudsbewerkingen of voor het continu uitvoeren van procedures als achtergrondprocessen.
Een ander gebruik voor automatische uitvoering is om de procedure systeem- of onderhoudstaken uit te voeren in tempdb
, zoals het maken van een globale tijdelijke tabel. Automatische uitvoering zorgt ervoor dat een dergelijke tijdelijke tabel altijd bestaat wanneer tempdb
opnieuw wordt gemaakt tijdens het opstarten van SQL Server.
Een automatisch uitgevoerde procedure werkt met dezelfde machtigingen als leden van de sysadmin
vaste serverfunctie. Eventuele foutberichten die door de procedure worden gegenereerd, worden naar het SQL Server-foutenlogboek geschreven.
Er is geen limiet aan het aantal opstartprocedures dat u kunt hebben, maar elke opstartprocedure verbruikt één worker thread tijdens de uitvoering. Als u meerdere procedures tijdens het opstarten wilt uitvoeren, maar ze niet parallel hoeft uit te voeren, kunt u één procedure als de opstartprocedure instellen en die procedure de andere procedures laten aanroepen. Deze methode gebruikt slechts één worker thread.
Tip
Retourneert geen resultatensets van een procedure die automatisch wordt uitgevoerd. Omdat de procedure wordt uitgevoerd door SQL Server in plaats van een toepassing of gebruiker, is er nergens plaats voor resultatensets.
Notitie
Azure SQL Database is ontworpen om functies te isoleren van afhankelijkheden van de master
-database. Als zodanig zijn Transact-SQL instructies voor het configureren van opties op serverniveau niet beschikbaar in Azure SQL. U kunt vaak geschikte alternatieven vinden voor andere Azure-services, zoals Elastische taken of Azure Automation-.
Een procedure instellen die automatisch wordt uitgevoerd bij het opstarten
Alleen de systeembeheerder (sa
) kan een procedure markeren die automatisch moet worden uitgevoerd.
Maak in SSMS verbinding met de database-engine.
Vanuit de werkbalk Standaard, selecteer Nieuwe query.
Voer de volgende sp_procoption opdrachten in om een opgeslagen procedure in te stellen die automatisch moet worden uitgevoerd bij het opstarten van SQL Server.
EXEC sp_procoption @ProcName = N'<stored procedure name>' , @OptionName = 'startup' , @OptionValue = 'on'; GO
In de werkbalk, selecteer uitvoeren.
Voorkomen dat een procedure automatisch wordt uitgevoerd bij het opstarten
Een sysadmin
kan sp_procoption gebruiken om te voorkomen dat een procedure automatisch wordt uitgevoerd bij het opstarten van SQL Server.
Maak in SSMS verbinding met de database-engine.
Selecteer nieuwe queryin de Standaard-werkbalk.
Voer de volgende opdrachten in het queryvenster in.
EXEC sp_procoption @ProcName = N'<stored procedure name>' , @OptionName = 'startup' , @OptionValue = 'off'; GO
In de werkbalk, selecteer Uitvoeren .