Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-databas i Microsoft Fabric
Den här artikeln beskriver hur du kör en lagrad procedur i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL.
Det finns olika sätt att köra en lagrad procedur. Den första och vanligaste metoden är att ett program eller en användare anropar proceduren. En annan metod är att ställa in den lagrade proceduren så att den körs automatiskt när en instans av SQL Server startar.
När en procedur anropas av ett program eller en användare anges nyckelordet Transact-SQL EXECUTE eller EXEC uttryckligen i anropet. Proceduren kan anropas och köras utan exec-nyckelordet om proceduren är den första instruktionen i en Transact-SQL batch.
Begränsningar och restriktioner
Den anropande databassorteringen används vid matchning av systemprocedurnamn. Därför använder du alltid det exakta fallet med systemprocedurnamn i proceduranrop. Den här koden misslyckas till exempel om den körs i kontexten för en databas som har en skiftlägeskänslig sortering:
EXEC SP_heLP; -- Fails to resolve because SP_heLP doesn't equal sp_help
För att visa de exakta systemprocedurnamnen, fråga katalogvyerna sys.system_objects och sys.system_parameters.
Om en användardefinierad procedur har samma namn som en systemprocedur kanske den användardefinierade proceduren aldrig körs.
Rekommendationer
Använd följande rekommendationer för att köra lagrade procedurer.
System lagrade procedurer
Systemprocedurer börjar med prefixet sp_
. Eftersom de visas logiskt i alla användar- och systemdefinierade databaser kan systemprocedurer köras från valfri databas utan att fullständigt kvalificera procedurnamnet. Det är dock bäst att schema-kvalificera alla systemprocedurnamn med schemanamnet sys
för att förhindra namnkonflikter. I följande exempel visas den rekommenderade metoden för att anropa en systemprocedur.
EXEC sys.sp_who;
Användardefinierade lagrade procedurer
När du kör en användardefinierad procedur är det bäst att kvalificera procedurnamnet med schemanamnet. Den här metoden ger en liten prestandaökning eftersom databasmotorn inte behöver söka i flera scheman. Om du använder schemanamnet kan du inte heller köra fel procedur om en databas har procedurer med samma namn i flera scheman.
Följande exempel visar den rekommenderade metoden för att köra en användardefinierad procedur. Den här proceduren accepterar två indataparametrar. Information om hur du anger indata- och utdataparametrar finns i Ange parametrar i en lagrad procedur.
EXECUTE SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
GO
Eller:
EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
GO
Om en icke-kvalificerad användardefinierad procedur anges söker databasmotorn efter proceduren i följande ordning:
Det
sys
schemat för den aktuella databasen.Anroparens standardschema om proceduren körs i en batch eller i dynamisk SQL. Om det icke-kvalificerade procedurnamnet visas i brödtexten i en annan procedurdefinition genomsöks det schema som innehåller den andra proceduren härnäst.
Det
dbo
-schema i den aktuella databasen.
Säkerhet
Säkerhetsinformation finns i EXECUTE AS (Transact-SQL) och EXECUTE AS (Transact-SQL).
Behörigheter
Information om behörigheter finns under Behörigheter i EXECUTE (Transact-SQL).
Körning av lagrad procedur
Du kan använda SQL Server Management Studio (SSMS) användargränssnitt eller Transact-SQL i ett SSMS-frågefönster för att köra en lagrad procedur. Använd alltid den senaste versionen av SSMS.
Använda SQL Server Management Studio
I Object Exploreransluter du till en instans av SQL Server eller Azure SQL Database, expanderar den instansen och expanderar sedan Databaser.
Expandera den databas som du vill använda, expandera Programmabilityoch expandera sedan Lagrade procedurer.
Högerklicka på den lagrade procedur som du vill köra och välj Kör lagrad procedur.
I dialogrutan Kör procedur anger Parameter namnet på varje parameter, datatyp anger dess datatyp och utdataparameter anger om det är en utdataparameter.
För varje parameter:
- Under Värdeanger du värdet som ska användas för parametern.
- Under Skicka nullvärdeväljer du om du vill skicka en NULL som värdet för parametern.
Välj OK för att köra den lagrade proceduren. Om den lagrade proceduren inte har några parametrar väljer du bara OK.
Den lagrade proceduren körs och resultaten visas i fönstret Resultat.
Om du till exempel vill köra den
SalesLT.uspGetCustomerCompany
lagrade proceduren från artikeln Skapa en lagrad procedur anger du Cannon för parametern @LastName och Chris för parametern @FirstName och väljer OK. Proceduren returnerarFirstName
Chris,LastName
Cannon, ochCompanyName
Outdoor Sporting Goods.
Använda Transact-SQL i ett frågefönster
I SSMS ansluter du till en instans av SQL Server eller Azure SQL Database.
I verktygsfältet väljer du Ny fråga.
Ange en EXECUTE-instruktion med följande syntax i frågefönstret och ange värden för alla förväntade parametrar:
EXECUTE <ProcedureName> N'<Parameter 1 value>, N'<Parameter x value>; GO
Följande Transact-SQL-instruktion kör till exempel den
uspGetCustomerCompany
lagrade proceduren och medCannon
som@LastName
parametervärde ochChris
som@FirstName
parametervärde:EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris'; GO
I verktygsfältet väljer du Kör. Den lagrade proceduren körs.
Alternativ för parametervärden
Det finns flera sätt att ange parametrar och värden i execute-instruktioner för lagrad procedur. I följande exempel visas flera olika alternativ för EXECUTE-instruktionen.
Om du anger parametervärdena i samma ordning som de definieras i den lagrade proceduren behöver du inte ange parameternamnen. Till exempel:
EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
Om du anger parameternamn i mönstret
@parameter_name=value
behöver du inte ange parameternamnen och värdena i samma ordning som de definieras. Något av följande uttryck är till exempel giltigt:EXEC SalesLT.uspGetCustomerCompany @FirstName = N'Chris', @LastName = N'Cannon';
eller:
EXEC SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
Om du använder formuläret
@parameter_name=value
för valfri parameter måste du använda det för alla efterföljande parametrar i den instruktionen. Du kan till exempel inte användaEXEC SalesLT.uspGetCustomerCompany1 @FirstName = N'Chris', N'Cannon';
.
Automatisk körning vid uppstart
gäller för: SQL Server
I SQL Server kan en medlem av sysadmin
-serverrollen använda sp_procoption för att ange eller rensa en procedur för automatisk körning vid start. Startprocedurer måste finnas i master
-databasen, måste ägas av sa
och kan inte ha indata- eller utdataparametrar. Mer information finns i sp_procoption (Transact-SQL).
Procedurer som har markerats för automatisk körning vid start körs varje gång SQL Server startar och den master
databasen återställs under startprocessen. Att konfigurera procedurer som ska köras automatiskt kan vara användbart för att utföra databasunderhållsåtgärder eller för att få procedurer att köras kontinuerligt som bakgrundsprocesser.
En annan användning för automatisk körning är att låta proceduren utföra system- eller underhållsaktiviteter i tempdb
, till exempel att skapa en global tillfällig tabell. Automatisk körning säkerställer att en sådan temporär tabell alltid finns när tempdb
återskapas under uppstart av SQL Server.
En automatiskt utförd procedur fungerar med samma behörigheter som medlemmar i sysadmin
fast serverroll. Eventuella felmeddelanden som genereras av proceduren skriver till SQL Server-felloggen.
Det finns ingen gräns för hur många startprocedurer du kan ha, men varje startprocedur förbrukar en arbetstråd under utförandet. Om du behöver köra flera procedurer vid start men inte behöver köra dem parallellt gör du en procedur till startproceduren och anropar de andra procedurerna. Den här metoden använder bara en arbetstråd.
Tips
Returnera inte några resultatuppsättningar från en procedur som körs automatiskt. Eftersom proceduren körs av SQL Server i stället för ett program eller en användare finns det ingenstans för resultatuppsättningar att ta vägen.
Not
Azure SQL Database är utformat för att isolera funktioner från beroenden i master
-databasen. Därför är Transact-SQL instruktioner som konfigurerar alternativ på servernivå inte tillgängliga i Azure SQL. Du kan ofta hitta lämpliga alternativ från andra Azure-tjänster, till exempel elastiska jobb eller Azure Automation.
Ange en procedur som ska köras automatiskt vid start
Endast systemadministratören (sa
) kan markera en procedur som ska köras automatiskt.
I SSMS ansluter du till databasmotorn.
I verktygsfältet Standard väljer du Ny fråga.
Ange följande sp_procoption kommandon för att ange en lagrad procedur som ska köras automatiskt vid SQL Server-start.
EXEC sp_procoption @ProcName = N'<stored procedure name>' , @OptionName = 'startup' , @OptionValue = 'on'; GO
I verktygsfältet väljer du Kör.
Stoppa en procedur från att köras automatiskt vid start
En sysadmin
kan använda sp_procoption för att stoppa en procedur från att köras automatiskt vid SQL Server-start.
I SSMS ansluter du till databasmotorn.
I verktygsfältet Standard väljer du Ny fråga.
Ange följande kommandon i frågefönstret.
EXEC sp_procoption @ProcName = N'<stored procedure name>' , @OptionName = 'startup' , @OptionValue = 'off'; GO
I verktygsfältet väljer du Kör.