Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform Systeem (PDW)
SQL-database in Microsoft Fabric
Een opgeslagen procedure in SQL Server is een groep van een of meer Transact-SQL instructies, of een verwijzing naar een CLR-methode (Common Runtime Language) van Microsoft .NET Framework. Procedures lijken op constructies in andere programmeertalen, omdat ze het volgende kunnen:
Accepteer invoerparameters en retourneer meerdere waarden in de vorm van uitvoerparameters naar het aanroepende programma.
Bevat programmeerinstructies waarmee bewerkingen in de database worden uitgevoerd. Deze verklaringen bevatten het aanroepen van andere procedures.
Retourneer een statuswaarde naar een aanroepend programma om aan te geven dat het is gelukt of mislukt (en de reden voor de fout).
Voordelen van het gebruik van opgeslagen procedures
In de volgende lijst worden enkele voordelen van het gebruik van procedures beschreven.
Beperkt server-/clientnetwerkverkeer
De opdrachten in een procedure worden uitgevoerd als één batch code. Deze aanpak kan het netwerkverkeer tussen de server en de client aanzienlijk verminderen, omdat alleen de aanroep voor het uitvoeren van de procedure via het netwerk wordt verzonden. Zonder de code-inkapseling die door een procedure wordt verstrekt, zou elke afzonderlijke coderegel over het netwerk gezonden moeten worden.
Sterkere beveiliging
Meerdere gebruikers en clientprogramma's kunnen bewerkingen uitvoeren op onderliggende databaseobjecten via een procedure, zelfs als de gebruikers en programma's geen directe machtigingen hebben voor deze onderliggende objecten. De procedure bepaalt welke processen en activiteiten worden uitgevoerd en beveiligt de onderliggende databaseobjecten. Deze aanpak elimineert de vereiste om machtigingen te verlenen op het niveau van het afzonderlijke object en vereenvoudigt de beveiligingslagen.
De EXECUTE AS-component kan worden opgegeven in de CREATE PROCEDURE instructie om het imiteren van een andere gebruiker in te schakelen of om gebruikers of toepassingen in staat te stellen bepaalde databaseactiviteiten uit te voeren zonder directe machtigingen voor de onderliggende objecten en opdrachten nodig te hebben. Sommige acties, zoals TRUNCATE TABLE, hebben bijvoorbeeld geen toekenningsmachtigingen die kunnen worden verleend. Om uit te voeren TRUNCATE TABLE, moet de gebruiker machtigingen hebben ALTER voor de opgegeven tabel. Het verlenen van gebruikersmachtigingen ALTER voor een tabel is mogelijk niet ideaal, omdat de gebruiker in feite machtigingen heeft die veel verder gaan dan de mogelijkheid om een tabel af tekappen. Door de TRUNCATE TABLE instructie in een module op te nemen en op te geven dat die module wordt uitgevoerd als een gebruiker die gemachtigd is om de tabel te wijzigen, kunt u de machtigingen om de tabel af te kappen uitbreiden naar de gebruiker aan wie u EXECUTE machtigingen voor de module verleent.
Wanneer een toepassing een procedure via het netwerk aanroept, is alleen de aanroep voor het uitvoeren van de procedure zichtbaar. Kwaadwillende gebruikers kunnen daarom geen tabel- en databaseobjectnamen zien, Transact-SQL instructies van hun eigen insluiten of zoeken naar gevoelige gegevens.
Het gebruik van procedureparameters helpt u bij het beveiligen van SQL-injectieaanvallen. Omdat parameterinvoer wordt behandeld als een letterlijke waarde en niet als uitvoerbare code, is het moeilijker voor een aanvaller om een opdracht in te voegen in de Transact-SQL instructies in de procedure en inbreuk te maken op beveiliging.
U kunt procedures versleutelen om de broncode te verdoezelen. Zie SQL Server-versleuteling voor meer informatie.
Opnieuw gebruiken van code
De code voor elke herhalende databasebewerking is een perfecte kandidaat voor inkapseling in procedures. Deze aanpak elimineert onnodige herschrijven van dezelfde code, vermindert de inconsistentie van code en staat elke gebruiker of toepassing met de benodigde machtigingen toe om de code te openen en uit te voeren.
Eenvoudiger onderhoud
Wanneer clienttoepassingen procedures aanroepen en databasebewerkingen in de gegevenslaag behouden, hoeft u alleen de procedures bij te werken voor wijzigingen in de onderliggende database. De toepassingslaag blijft gescheiden en hoeft niets te weten te komen over wijzigingen in database-indelingen, relaties of processen.
Verbeterde prestaties
Een procedure compileert standaard de eerste keer dat deze wordt uitgevoerd en maakt een uitvoeringsplan dat opnieuw wordt gebruikt voor volgende uitvoeringen. Omdat de queryprocessor geen nieuw plan hoeft te maken, duurt het doorgaans minder tijd om de procedure te verwerken.
Als er aanzienlijke wijzigingen zijn in de tabellen of gegevens waarnaar wordt verwezen door de procedure, kan het vooraf gecompileerde plan ertoe leiden dat de procedure langzamer wordt uitgevoerd. In dit geval kan het opnieuw compileren van de procedure en het afdwingen van een nieuw uitvoeringsplan de prestaties verbeteren.
Typen opgeslagen procedures
User-defined
Een door de gebruiker gedefinieerde procedure kan worden gemaakt in een door de gebruiker gedefinieerde database of in alle systeemdatabases behalve de Resource database. De procedure kan worden ontwikkeld in Transact-SQL of als verwijzing naar een CLR-methode (Common Runtime Language) van .NET Framework.
Temporary
Tijdelijke procedures zijn een vorm van door de gebruiker gedefinieerde procedures. Tijdelijke procedures zijn als een permanente procedure, behalve dat ze worden opgeslagen in tempdb. Er zijn twee soorten tijdelijke procedures: lokaal en globaal. Ze verschillen van elkaar in hun namen, hun zichtbaarheid en hun beschikbaarheid. Lokale tijdelijke procedures hebben één nummerteken (#) als het eerste teken van hun namen. Ze zijn alleen zichtbaar voor de huidige gebruikersverbinding en worden verwijderd wanneer de verbinding wordt gesloten. Globale tijdelijke procedures hebben twee cijfertekens (##) als de eerste twee tekens van hun namen. Ze zijn zichtbaar voor alle gebruikers nadat ze zijn gemaakt en worden verwijderd aan het einde van de laatste sessie met behulp van de procedure.
System
Systeemprocedures zijn opgenomen in de database-engine. Ze worden fysiek opgeslagen in de interne, verborgen Resource database en worden logisch weergegeven in het sys schema van elke door het systeem gedefinieerde en door de gebruiker gedefinieerde database. Daarnaast bevat de msdb database ook door het systeem opgeslagen procedures in het schema dat wordt gebruikt voor het dbo plannen van waarschuwingen en taken. Omdat systeemprocedures beginnen met het voorvoegsel sp_, moet u dit voorvoegsel niet gebruiken bij het benoemen van door de gebruiker gedefinieerde procedures. Zie Systeem opgeslagen procedures voor een volledige lijst met systeemprocedures.
SQL Server ondersteunt de systeemprocedures die een interface bieden van SQL Server naar externe programma's voor verschillende onderhoudsactiviteiten. Deze uitgebreide procedures gebruiken het xp_ voorvoegsel. Zie Algemene uitgebreide opgeslagen procedures voor een volledige lijst met uitgebreide procedures.
Door de gebruiker gedefinieerde uitgebreide
Uitgebreide procedures maken het maken van externe routines mogelijk in een programmeertaal zoals C. Deze procedures zijn DLL's die een exemplaar van SQL Server dynamisch kan laden en uitvoeren.
Note
Uitgebreide opgeslagen procedures worden verwijderd in een toekomstige versie van SQL Server. Gebruik deze functie niet in nieuwe ontwikkelwerkzaamheden en wijzig toepassingen die deze functie momenteel zo snel mogelijk gebruiken. Maak in plaats daarvan CLR-procedures. Deze methode biedt een robuuster en veiliger alternatief voor het schrijven van uitgebreide procedures.
Gerelateerde taken
| Taakbeschrijving | Article |
|---|---|
| Hierin wordt beschreven hoe u een opgeslagen procedure maakt. | Een opgeslagen procedure maken |
| Hierin wordt beschreven hoe u een opgeslagen procedure wijzigt. | een opgeslagen procedure wijzigen |
| Hierin wordt beschreven hoe u een opgeslagen procedure verwijdert. | Een opgeslagen procedure verwijderen |
| Beschrijft hoe u een opgeslagen procedure uitvoert. | Een opgeslagen procedure uitvoeren |
| Hierin wordt beschreven hoe u machtigingen kunt verlenen voor een opgeslagen procedure. | Machtigingen verlenen voor een opgeslagen procedure |
| Hierin wordt beschreven hoe u gegevens van een opgeslagen procedure naar een toepassing retourneert. | Gegevens retourneren uit een opgeslagen procedure |
| Hierin wordt beschreven hoe u een opgeslagen procedure opnieuw compileert. | Een opgeslagen procedure opnieuw compileren |
| Hierin wordt beschreven hoe u de naam van een opgeslagen procedure wijzigt. | De naam van een opgeslagen procedure wijzigen |
| Hierin wordt beschreven hoe u de definitie van een opgeslagen procedure kunt bekijken. | De definitie van een opgeslagen procedure weergeven |
| Hierin wordt beschreven hoe u de afhankelijkheden van een opgeslagen procedure kunt weergeven. | De afhankelijkheden van een opgeslagen procedure weergeven |
| Beschrijft hoe parameters worden gebruikt in een opgeslagen procedure. | Parameters |