Not
Å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
Analysplattformssystem (PDW)
SQL-databas i Microsoft Fabric
En lagrad procedur i SQL Server är en grupp med en eller flera Transact-SQL-instruktioner, eller en referens till en CLR-metod (Microsoft .NET Framework Common Runtime Language). Procedurer liknar konstruktioner i andra programmeringsspråk eftersom de kan:
Acceptera indataparametrar och returnera flera värden i form av utdataparametrar till det anropande programmet.
Innehåller programmeringsinstruktioner som utför åtgärder i databasen. Dessa uttryck innehåller anrop till andra procedurer.
Returnera ett statusvärde till ett anropande program för att indikera framgång eller fel (samt orsaken till misslyckandet).
Fördelar med att använda lagrade procedurer
I följande lista beskrivs några fördelar med att använda procedurer.
Minskad server-/klientnätverkstrafik
Kommandona i en procedur körs som en enda kodbatch. Den här metoden kan avsevärt minska nätverkstrafiken mellan servern och klienten eftersom endast anropet för att köra proceduren skickas över nätverket. Utan kodkapslingen som tillhandahålls av en procedur måste varje enskild kodrad korsa nätverket.
Starkare säkerhet
Flera användare och klientprogram kan utföra åtgärder på underliggande databasobjekt genom en procedur, även om användarna och programmen inte har direkt behörighet för dessa underliggande objekt. Proceduren styr vilka processer och aktiviteter som utförs och skyddar de underliggande databasobjekten. Den här metoden eliminerar kravet på att bevilja behörigheter på den enskilda objektnivån och förenklar säkerhetsskikten.
EXECUTE AS-satsen kan anges i -instruktionen CREATE PROCEDURE för att göra det möjligt att personifiera en annan användare eller göra det möjligt för användare eller program att utföra vissa databasaktiviteter utan att behöva direkta behörigheter för underliggande objekt och kommandon. Vissa åtgärder, till exempel TRUNCATE TABLE, har inte behörigheter som kan beviljas. Om du vill köra TRUNCATE TABLEmåste användaren ha ALTER behörighet för den angivna tabellen. Att ge en användare ALTER behörighet i en tabell kanske inte är idealiskt, eftersom användaren i praktiken har behörigheter långt utöver möjligheten att trunkera en tabell. Genom att införliva -instruktionen TRUNCATE TABLE i en modul och ange att modulen ska köras som en användare som har behörighet att ändra tabellen kan du utöka behörigheterna för att trunkera tabellen till den användare som du beviljar EXECUTE behörigheter för modulen.
När ett program anropar en procedur via nätverket visas bara anropet för att köra proceduren. Därför kan skadliga användare inte se tabell- och databasobjektnamn, bädda in Transact-SQL egna instruktioner eller söka efter kritiska data.
Med hjälp av procedureparametrar kan du skydda dig mot SQL-inmatningsattacker. Eftersom parameterindata behandlas som ett literalvärde och inte som körbar kod är det svårare för en angripare att infoga ett kommando i Transact-SQL-instruktionerna i proceduren och äventyra säkerheten.
Du kan kryptera procedurer för att dölja källkoden. Mer information finns i SQL Server-kryptering.
Återanvändning av kod
Koden för en upprepade databasoperation är en perfekt kandidat för inkapsling i en procedur. Den här metoden eliminerar onödiga omskrivningar av samma kod, minskar kodinkonsekvensen och tillåter alla användare eller program med nödvändig behörighet att komma åt och köra koden.
Enklare underhåll
När klientprogram anropar procedurer och behåller databasåtgärder på datanivån behöver du bara uppdatera procedurerna för eventuella ändringar i den underliggande databasen. Programnivån förblir separat och behöver inte känna till några ändringar i databaslayouter, relationer eller processer.
Förbättrad prestanda
Som standard kompilerar en procedur första gången den körs och skapar en körningsplan som den återanvänder för efterföljande körningar. Eftersom frågeprocessorn inte behöver skapa en ny plan tar det vanligtvis mindre tid att bearbeta proceduren.
Om det sker betydande ändringar i tabellerna eller data som anges i proceduren kan den förkompilerade planen faktiskt göra att proceduren går långsammare. I det här fallet kan en omkompilering av proceduren och tvinga fram en ny körningsplan förbättra prestandan.
Typer av lagrade procedurer
User-defined
En användardefinierad procedur kan skapas i en användardefinierad databas eller i alla systemdatabaser utom Resource databasen. Proceduren kan utvecklas antingen i Transact-SQL eller som en referens till en CLR-metod (Common Runtime Language).
Temporary
Tillfälliga procedurer är en form av användardefinierade procedurer. Tillfälliga procedurer är som en permanent procedur, förutom att de lagras i tempdb. Det finns två typer av tillfälliga procedurer: lokala och globala. De skiljer sig från varandra i sina namn, deras synlighet och deras tillgänglighet. Lokala tillfälliga procedurer har ett enda nummertecken (#) som det första tecknet i deras namn. De är bara synliga för den aktuella användaranslutningen och tas bort när anslutningen stängs. Globala tillfälliga procedurer har två nummertecken (##) som de två första tecknen i deras namn. De är synliga för alla användare när de har skapats och tas bort i slutet av den senaste sessionen med hjälp av proceduren.
System
Systemprocedurer ingår i databasmotorn. De lagras fysiskt i den interna, dolda Resource databasen och visas logiskt i sys schemat för varje systemdefinierad och användardefinierad databas.
msdb Dessutom innehåller databasen även system lagrade procedurer i schemat dbo som används för schemaläggning av aviseringar och jobb. Eftersom systemprocedurer börjar med prefixet sp_ska du inte använda det här prefixet när du namnger användardefinierade procedurer. En fullständig lista över systemprocedurer finns i System lagrade procedurer.
SQL Server stöder de systemprocedurer som tillhandahåller ett gränssnitt från SQL Server till externa program för olika underhållsaktiviteter. Dessa utökade procedurer använder prefixet xp_ . En fullständig lista över utökade procedurer finns i Allmänna utökade lagrade procedurer.
Utökad användardefinierad funktion
Med utökade procedurer kan du skapa externa rutiner på ett programmeringsspråk som C. Dessa procedurer är DLL:er som en instans av SQL Server kan läsa in och köra dynamiskt.
Note
Utökade lagrade procedurer tas bort i en framtida version av SQL Server. Använd inte den här funktionen i nytt utvecklingsarbete och ändra program som för närvarande använder den här funktionen så snart som möjligt. Skapa CLR-procedurer i stället. Den här metoden ger ett mer robust och säkert alternativ till att skriva utökade procedurer.
Relaterade uppgifter
| Uppgiftsbeskrivning | Article |
|---|---|
| Beskriver hur du skapar en lagrad procedur. | Skapa en lagrad procedur |
| Beskriver hur du ändrar en lagrad procedur. | Ändra en lagrad procedur |
| Beskriver hur du tar bort en lagrad procedur. | Ta bort en lagrad procedur |
| Beskriver hur du kör en lagrad procedur. | Köra en lagrad procedur |
| Beskriver hur du beviljar behörigheter för en lagrad procedur. | Bevilja behörigheter för en lagrad procedur |
| Beskriver hur du returnerar data från en lagrad procedur till ett program. | Returnera data från en lagrad procedur |
| Beskriver hur du kompilera om en lagrad procedur. | Kompilera om en lagrad procedur |
| Beskriver hur du byter namn på en lagrad procedur. | Byt namn på en lagrad procedur |
| Beskriver hur du visar definitionen av en lagrad procedur. | Visa definitionen av en lagrad procedur |
| Beskriver hur du visar beroenden för en lagrad procedur. | Visa beroenden för en lagrad procedur |
| Beskriver hur parametrar används i en lagrad procedur. | Parameters |