Freigeben über


Gespeicherte Prozeduren (Datenbank-Engine)

Gilt für:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-Datenbank in Microsoft Fabric

Eine gespeicherte Prozedur in SQL Server ist eine Gruppe von einer oder mehreren Transact-SQL-Anweisungen oder einem Verweis auf eine Microsoft .NET Framework-CLR-Methode (Common Language Runtime). Prozeduren sind mit Konstrukten anderer Programmiersprachen vergleichbar, da sie folgende Fähigkeiten aufweisen:

  • Annehmen von Eingabeparametern und Zurückgeben mehrerer Werte in Form von Ausgabeparametern an das aufrufende Programm.

  • Aufnehmen von Programmierungsanweisungen, die Vorgänge in der Datenbank ausführen. Diese Anweisungen umfassen das Aufrufen anderer Prozeduren.

  • Zurückgeben eines Statuswerts an ein aufrufendes Programm, der Erfolg oder Misserfolg (sowie die Ursache für den Misserfolg) anzeigt.

Vorteile bei der Verwendung gespeicherter Prozeduren

In der folgenden Liste sind einige Vorteile bei der Verwendung von Prozeduren beschrieben.

Verringerter Netzwerkdatenverkehr zwischen Server und Client

Die Befehle in einer Prozedur werden als einzelner Codebatch ausgeführt. Dieser Ansatz kann den Netzwerkdatenverkehr zwischen dem Server und dem Client erheblich reduzieren, da nur der Aufruf zum Ausführen der Prozedur über das Netzwerk gesendet wird. Wenn der Code nicht von einer Prozedur gekapselt würde, müsste jede einzelne Codezeile über das Netzwerk übertragen werden.

Mehr Sicherheit

Mithilfe einer Prozedur können mehrere Benutzer und Clientprogramme Vorgänge für zugrunde liegende Datenbankobjekte ausführen, selbst wenn die Benutzer und Programme keine direkten Berechtigungen für diese zugrunde liegenden Objekte aufweisen. Die Prozedur steuert, welche Prozesse und Aktivitäten ausgeführt werden, und schützt die zugrunde liegenden Datenbankobjekte. Bei diesem Ansatz wird die Anforderung beseitigt, Berechtigungen auf einzelner Objektebene zu erteilen und die Sicherheitsebenen zu vereinfachen.

Die EXECUTE AS -Klausel kann in der CREATE PROCEDURE-Anweisung angegeben werden, damit das Annehmen der Identität eines anderen Benutzers unterstützt wird, oder um Benutzern bzw. Anwendungen das Ausführen bestimmter Datenbankaktivitäten zu ermöglichen, ohne dass sie über direkte Berechtigungen für die zugrunde liegenden Objekte und Befehle verfügen. Beispielsweise weisen bestimmte Aktionen wie etwa TRUNCATE TABLE keine erteilbaren Berechtigungen auf. Um TRUNCATE TABLE auszuführen, benötigt der Benutzer für die festgelegte Tabelle die ALTER-Berechtigungen. Die Erteilung der ALTER-Berechtigungen für eine Tabelle kann sich als nicht ideal erweisen, weil der Benutzer dann Berechtigungen besitzt, die über die Möglichkeit hinausgehen, die Tabelle abzuschneiden. Durch die Aufnahme der TRUNCATE TABLE-Anweisung in ein Modul und durch die Festlegung, dass das Modul als Benutzer mit der Berechtigung zur Tabellenänderung ausgeführt wird, können Sie die Berechtigungen zum Abschneiden der Tabelle auf alle Benutzer ausdehnen, denen Sie die EXECUTE-Berechtigungen für das Modul erteilen.

Wenn eine Anwendung eine Prozedur über das Netzwerk aufrufrt, ist nur der Aufruf zum Ausführen der Prozedur sichtbar. Daher haben böswillige Benutzer keine Möglichkeit, die Namen von Tabellen- und Datenbankobjekten einzusehen, eigene Transact-SQL-Anweisungen einzubetten oder wichtige Daten zu suchen.

Die Verwendung von Prozedurparametern bietet Schutz vor Angriffen durch Einschleusung von SQL-Befehlen. Da die Parametereingabe als Literalwert und nicht als ausführbarer Code behandelt wird, ist es für einen Angreifer schwieriger, einen Befehl in die Transact-SQL-Anweisungen innerhalb der Prozedur einzufügen und die Sicherheit zu gefährden.

Sie können Prozeduren verschlüsseln, um den Quellcode zu verschleiern. Weitere Informationen finden Sie unter SQL Server Encryption.

Wiederverwendung von Code

Der Code für jeden wiederholten Datenbankvorgang ist ein perfekter Kandidat für die Kapselung in Prozeduren. Bei diesem Ansatz werden unnötige Neuschreibungen desselben Codes beseitigt, Inkonsistenzen im Code verringert und jeder Benutzer oder jede Anwendung mit den erforderlichen Berechtigungen ermöglicht, auf den Code zuzugreifen und ihn auszuführen.

Einfachere Wartung

Wenn Clientanwendungen Prozeduren aufrufen und Datenbankvorgänge auf der Datenebene beibehalten, müssen Sie die Prozeduren nur für Änderungen in der zugrunde liegenden Datenbank aktualisieren. Die Anwendungsebene bleibt getrennt und muss keine Änderungen an Datenbanklayouts, Beziehungen oder Prozessen kennen.

Verbesserte Leistung

Standardmäßig kompiliert eine Prozedur das erste Mal, wenn sie ausgeführt wird, und erstellt einen Ausführungsplan, den sie für nachfolgende Ausführungen wiederverwendet. Da vom Abfrageprozessor kein neuer Plan erstellt werden muss, wird für die Verarbeitung der Prozedur normalerweise weniger Zeit benötigt.

Wenn es an den Tabellen oder Daten, auf die die Prozedur verweist, umfangreichere Änderungen gibt, wird die Prozedur aufgrund des vorkompilierten Plans möglicherweise langsamer ausgeführt. In diesem Fall kann die Leistung durch eine Neukompilierung der Prozedur und eine erzwungene Neuerstellung des Ausführungsplans verbessert werden.

Arten von gespeicherten Prozeduren

User-defined

Eine benutzerdefinierte Prozedur kann in einer benutzerdefinierten Datenbank sowie in allen Systemdatenbanken außer der Resource-Datenbank erstellt werden. Das Verfahren kann entweder in Transact-SQL oder als Verweis auf eine .NET Framework Common Runtime Language (CLR)-Methode entwickelt werden.

Temporary

Temporäre Prozeduren stellen eine Art benutzerdefinierter Prozedur dar. Temporäre Prozeduren sind wie eine dauerhafte Prozedur, mit der Ausnahme, dass sie in tempdb gespeichert werden. Es gibt zwei Arten von temporären Prozeduren: lokale und globale temporäre Prozeduren. Sie unterscheiden sich hinsichtlich ihrer Namen, ihrer Sichtbarkeit und ihrer Verfügbarkeit. Lokale temporäre Prozeduren weisen ein einzelnes Nummernzeichen (#) als erstes Zeichen ihrer Namen auf. Sie sind nur für die aktuelle Benutzerverbindung sichtbar und werden gelöscht, wenn die Verbindung geschlossen wird. Globale temporäre Prozeduren weisen zwei Nummernzeichen (##) als die ersten beiden Zeichen ihrer Namen auf. Sie sind für jeden Benutzer sichtbar, nachdem sie erstellt wurden, und werden am Ende der letzten Sitzung mithilfe des Verfahrens gelöscht.

System

Systemprozeduren sind in der Datenbank-Engine enthalten. Sie werden physisch in der internen, ausgeblendeten Resource Datenbank gespeichert und logisch im sys Schema jeder systemdefiniert und benutzerdefinierten Datenbank angezeigt. Außerdem verfügt die msdb-Datenbank über gespeicherte Systemprozeduren im dbo-Schema, die zum Planen von Warnungen und Aufträgen verwendet werden. Da Systemprozeduren mit dem Präfix beginnen, verwenden Sie dieses Präfix sp_nicht beim Benennen von benutzerdefinierten Prozeduren. Eine vollständige Liste der Systemprozeduren finden Sie unter "System gespeicherte Prozeduren".

SQL Server unterstützt die Systemprozeduren, die eine Schnittstelle von SQL Server zu externen Programmen für verschiedene Wartungsaktivitäten bereitstellen. Diese erweiterten Prozeduren verwenden das Präfix xp_. Eine vollständige Liste erweiterter Prozeduren finden Sie unter "Allgemeine erweiterte gespeicherte Prozeduren".

Erweiterte benutzerdefinierte Einstellung

Mit erweiterten gespeicherten Prozeduren können externe Routinen in einer Programmiersprache wie C erstellt werden. Diese Prozeduren sind DLLs, die von einer Instanz von SQL Server dynamisch geladen und ausgeführt werden können.

Note

Die erweiterten gespeicherten Prozeduren werden in einer zukünftigen Version von SQL Server entfernt. Verwenden Sie dieses Feature nicht in einer neuen Entwicklungsarbeit, und ändern Sie Anwendungen, die dieses Feature verwenden, so schnell wie möglich. Erstellen Sie stattdessen CLR-Prozeduren. Diese Methode bietet eine robustere und sicherere Alternative zum Schreiben von erweiterten Prozeduren.

Aufgabenbeschreibung Article
Beschreibt, wie eine gespeicherte Prozedur erstellt wird. Erstellen einer gespeicherten Prozedur
Beschreibt, wie eine gespeicherte Prozedur geändert wird. Ändern einer gespeicherten Prozedur
Beschreibt, wie eine gespeicherte Prozedur gelöscht wird. Löschen einer gespeicherten Prozedur
Beschreibt, wie eine gespeicherte Prozedur ausgeführt wird. Ausführen einer gespeicherten Prozedur
Beschreibt, wie Berechtigungen für eine gespeicherte Prozedur erteilt werden. Erteilen von Berechtigungen für eine gespeicherte Prozedur
Beschreibt, wie Daten von einer gespeicherten Prozedur an eine Anwendung zurückgegeben werden. Zurückgeben von Daten aus einer gespeicherten Prozedur
Beschreibt, wie eine gespeicherte Prozedur neu kompiliert wird. Erneutes Kompilieren einer gespeicherten Prozedur
Beschreibt, wie eine gespeicherte Prozedur umbenannt wird. Umbenennen einer gespeicherten Prozedur
Beschreibt, wie die Definition einer gespeicherten Prozedur angezeigt wird. Anzeigen der Definition einer gespeicherten Prozedur
Beschreibt, wie die Abhängigkeiten von einer gespeicherten Prozedur angezeigt werden. Anzeigen der Abhängigkeiten einer gespeicherten Prozedur
Beschreibt, wie Parameter in einer gespeicherten Prozedur verwendet werden. Parameters