Ausführen einer gespeicherten Prozedur
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
In diesem Artikel wird beschrieben, wie eine gespeicherte Prozedur in SQL Server mithilfe von SQL Server Management Studio oder Transact-SQL ausgeführt wird.
Zum Ausführen einer gespeicherten Prozedur stehen zwei Möglichkeiten zur Verfügung. Der erste und gebräuchlichste Ansatz besteht darin, dass eine Anwendung oder ein Benutzer die Prozedur aufruft. Der zweite Ansatz ist das Einrichten der Prozedur zur automatischen Ausführung beim Start einer Instanz von SQL Server . Wenn eine Prozedur von einer Anwendung oder einer*m Benutzer*in aufgerufen wird, wird das Transact-SQL-Schlüsselwort EXECUTE oder EXEC explizit im Aufruf angegeben. Falls es sich bei der Prozedur um die erste Anweisung im Transact-SQL-Batch handelt, kann sie ohne das Schlüsselwort EXEC aufgerufen und ausgeführt werden.
Einschränkungen
Die Sortierung der aufrufenden Datenbank wird beim Zuordnen von Systemprozedurnamen verwendet. Aus diesem Grund muss in Prozeduraufrufen immer die genaue Groß-/Kleinschreibung von Systemprozedurnamen verwendet werden. Dieser Code schlägt z. B. fehl, wenn er im Kontext einer Datenbank ausgeführt wird, die eine Sortierung zwischen Groß- und Kleinschreibung aufweist:
EXEC SP_heLP; -- Will fail to resolve because SP_heLP does not equal sp_help
Fragen Sie die Katalogsichten sys.system_objects und sys.system_parameters ab, um die genauen Systemprozedurnamen anzuzeigen.
Wenn eine benutzerdefinierte Prozedur den gleichen Namen besitzt wie eine Systemprozedur, wird die benutzerdefinierte Prozedur möglicherweise nie ausgeführt.
Empfehlungen
Ausführen gespeicherter API-Systemprozeduren
Systemprozeduren beginnen mit dem Präfix sp_
. Da sie in allen benutzer- und systemdefinierten Datenbanken logisch angezeigt werden, können sie in jeder Datenbank ausgeführt werden, ohne den Prozedurnamen voll zu qualifizieren. Es wird jedoch empfohlen, die Namen aller Systemprozeduren mit dem sys
-Schemanamen für das Schema zu qualifizieren, um Namenskonflikte zu vermeiden. Das folgende Beispiel zeigt die empfohlene Methode für das Aufrufen einer Systemprozedur.
EXEC sys.sp_who;
Ausführen von benutzerdefinierten gespeicherten Prozeduren
Beim Ausführen einer benutzerdefinierten Prozedur empfiehlt es sich, den Prozedurnamen mit dem Schemanamen zu qualifizieren. Auf diese Weise lässt sich die Leistung geringfügig verbessern, da Datenbank-Engine nicht mehrere Schemas durchsuchen muss. Zudem können Sie so verhindern, dass die falsche Prozedur ausgeführt, wenn eine Datenbank in mehreren Schemas über Prozeduren mit dem gleichen Namen verfügt.
Das folgende Beispiel zeigt die empfohlene Methode für das Ausführen einer benutzerdefinierten Prozedur. Beachten Sie, dass die Prozedur einen Eingabeparameter akzeptiert. Informationen zum Angeben von Ein- und Ausgabeparametern finden Sie unter Angeben von Parametern.
USE AdventureWorks2022;
GO
EXEC dbo.uspGetEmployeeManagers @BusinessEntityID = 50;
GO
-Oder-
EXEC AdventureWorks2022.dbo.uspGetEmployeeManagers 50;
GO
Wird der nicht gekennzeichnete Name einer benutzerdefinierten Prozedur angegeben, durchsucht Datenbank-Engine die folgenden Schemas in der angegebenen Reihenfolge nach der Prozedur:
Das
sys
-Schema der aktuellen DatenbankDas Standardschema des Aufrufers, wenn die Prozedur als Batch oder dynamisches SQL ausgeführt wird. Falls aber der nicht qualifizierte Name der Prozedur im Textkörper einer anderen Prozedurdefinition vorkommt, wird als nächstes das Schema durchsucht, das diese andere Prozedur enthält.
Das
dbo
-Schema muss in der aktuellen Datenbank vorhanden sein.
Automatisches Ausführen von gespeicherten Prozeduren
Zur automatischen Ausführung markierte Prozeduren werden bei jedem Start von SQL Server ausgeführt, und die master
-Datenbank wird während dieses Startprozesses wiederhergestellt. Das Einrichten von Prozeduren zur automatischen Ausführung kann für Datenbankwartungsvorgänge oder die fortlaufende Ausführung von Prozeduren als Hintergrundprozesse nützlich sein. Die automatische Ausführung kann auch verwendet werden, um System- oder Wartungstasks in tempdb
auszuführen, z. B. das Erstellen einer globalen temporären Tabelle. Auf diese Weise wird sichergestellt, dass eine solche temporäre Tabelle immer vorhanden ist, wenn tempdb
beim Start von SQL Server neu erstellt wird.
Eine automatisch ausgeführte Prozedur wird mit den Berechtigungen ausgeführt, die den Mitgliedern der festen Serverrolle sysadmin zugewiesen sind. Alle Fehlermeldungen, die von der Prozedur erzeugt werden, werden in das SQL Server -Fehlerprotokoll geschrieben.
Es gibt keine Beschränkung für die Anzahl der Autostartprozeduren. Bedenken Sie jedoch, dass jede dieser Prozeduren während der Ausführung jeweils einen Arbeitsthread belegt. Wenn Sie beim Systemstart mehrere Prozeduren ausführen müssen, diese aber nicht parallel ausgeführt werden müssen, legen Sie eine Prozedur als Autostartprozedur fest, und schreiben Sie diese Prozedur so, dass sie die anderen Prozeduren aufruft. Dadurch wird nur ein Arbeitsthread benötigt.
Tipp
Von einer automatisch ausgeführten Prozedur sollten keine Resultsets zurückgegeben werden. Da die Prozedur von SQL Server und nicht von einer Anwendung oder einem Benutzer ausgeführt wird, gibt es kein Ausgabeziel für die Resultsets.
Festlegen, Löschen und Steuern der automatischen Ausführung
Nur der Systemadministrator (sa
) kann eine Prozedur für die automatische Ausführung markieren. Die Prozedur muss sich außerdem in der master
-Datenbank im Besitz von sa
befinden und darf keine Eingabe- oder Ausgabeparameter enthalten.
Verwenden Sie sp_procoption für folgende Aufgaben:
Angeben einer vorhandenen Prozedur als Startprozedur.
Verhindern der Ausführung einer Prozedur beim Start von SQL Server .
Sicherheit
Weitere Informationen finden Sie unter EXECUTE AS (Transact-SQL) und EXECUTE AS-Klausel (Transact-SQL).
Berechtigungen
Weitere Informationen finden Sie im Abschnitt „Berechtigungen“ unter EXECUTE (Transact-SQL).
Verwenden von SQL Server Management Studio
Verwenden Sie immer die neueste Version von SQL Server Management Studio (SSMS).
Ausführen einer gespeicherten Prozedur
Stellen Sie im Objekt-Explorereine Verbindung mit einer Instanz von SQL Server-Datenbank-Engineher, erweitern Sie diese Instanz und dann Datenbanken.
Erweitern Sie die gewünschte Datenbank, Programmierbarkeitund dann Gespeicherte Prozeduren.
Klicken Sie mit der rechten Maustaste auf die gewünschte benutzerdefinierte gespeicherte Prozedur, und klicken Sie dann auf Gespeicherte Prozedur ausführen.
Geben Sie im Dialogfeld Prozedur ausführen einen Wert für jeden Parameter an, und legen Sie fest, ob er einen NULL-Wert übergeben soll.
Parameter
Zeigt den Namen des Parameters an.Datentyp
Zeigt den Datentyp des Parameters an.Ausgabeparameter
Zeigt an, ob es sich um einen Ausgabeparameter handelt.NULL-Wert übergeben
Übergibt als Wert des Parameters einen NULL-Wert.Wert
Geben Sie den Wert des Parameters bei Aufruf der Prozedur ein.Klicken Sie auf OK, um die gespeicherte Prozedur auszuführen.
Verwenden von Transact-SQL
Ausführen einer gespeicherten Prozedur
Stellen Sie eine Verbindung mit dem Datenbank-Engineher.
Wählen Sie auf der Symbolleiste Standard die Option Neue Abfrage aus.
Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen. Dieses Beispiel zeigt, wie eine gespeicherte Prozedur ausgeführt wird, die einen Parameter erwartet. Im Beispiel wird die
uspGetEmployeeManagers
gespeicherte Prozedur mit dem Wert6
ausgeführt, der@EmployeeID
als Parameter angegeben ist.
USE AdventureWorks2022;
GO
EXEC dbo.uspGetEmployeeManagers 6;
GO
Festlegen oder Löschen einer Prozedur für die automatische Ausführung
Startprozeduren müssen in der master
-Datenbank gespeichert sein und können keine INPUT- oder OUTPUT-Parameter enthalten. Die Ausführung der gespeicherten Prozeduren beginnt, wenn alle Datenbanken wiederhergestellt sind und beim Start die Meldung "Die Wiederherstellung ist abgeschlossen" protokolliert wird.
Weitere Informationen finden Sie unter sp_procoption (Transact-SQL).
Stellen Sie eine Verbindung mit dem Datenbank-Engineher.
Wählen Sie auf der Symbolleiste Standard die Option Neue Abfrage aus.
Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen. Dieses Beispiel zeigt, wie sp_procoption verwendet wird, um die automatische Ausführung einer Prozedur festzulegen.
EXEC sp_procoption @ProcName = N'<procedure name>'
, @OptionName = 'startup'
, @OptionValue = 'on';
GO
Verhindern der automatische Ausführung einer Prozedur
Stellen Sie eine Verbindung mit dem Datenbank-Engineher.
Wählen Sie auf der Symbolleiste Standard die Option Neue Abfrage aus.
Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen. Dieses Beispiel zeigt, wie sp_procoption verwendet wird, um die automatische Ausführung einer Prozedur zu beenden.
EXEC sp_procoption @ProcName = N'<procedure name>'
, @OptionName = 'startup'
, @OptionValue = 'off';
GO