Ausführen einer gespeicherten Prozedur
In diesem Thema wird beschrieben, wie Sie eine gespeicherte Prozedur in SQL Server 2012 mithilfe von SQL Server Management Studio oder Transact-SQL ausführen.
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 einem Benutzer aufgerufen wird, wird das Transact-SQL EXECUTE- oder EXEC-Schlüsselwort explizit im Aufruf angegeben. Falls es sich bei der Prozedur um die erste Anweisung im Transact-SQL-Batch handelt, kann sie alternativ ohne das Schlüsselwort aufgerufen und ausgeführt werden.
In diesem Thema
Vorbereitungen:
Einschränkungen
Empfehlungen
Sicherheit
Ausführen einer gespeicherten Prozedur mit:
SQL Server Management Studio
Transact-SQL
Vorbereitungen
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. Der folgende Code schlägt z. B. fehl, wenn er im Kontext einer Datenbank ausgeführt wird, bei deren Sortierung die Groß-/Kleinschreibung beachtet wird:
EXEC SP_heLP; -- Will fail to resolve because SP_heLP does not equal sp_help
Fragen Sie die sys.system_objects- und sys.system_parameters-Katalogsichten 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 von gespeicherten 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 Database Engine (Datenbankmodul) 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 AdventureWorks2012; GO EXEC dbo.uspGetEmployeeManagers @BusinessEntityID = 50;
Oder:
EXEC AdventureWorks2012.dbo.uspGetEmployeeManagers 50; GO
Wird der nicht gekennzeichnete Name einer benutzerdefinierten Prozedur angegeben, durchsucht Database Engine (Datenbankmodul) die folgenden Schemas in der angegebenen Reihenfolge nach der Prozedur:
Das sys-Schema der aktuellen Datenbank.
Das 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 in der aktuellen Datenbank
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" in EXECUTE (Transact-SQL).
[Nach oben]
SQL Server Management Studio
So führen Sie eine gespeicherte Prozedur aus
Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz von SQL Server Database Engine (Datenbankmodul) her, erweitern Sie diese Instanz und dann Datenbanken.
Erweitern Sie die gewünschte Datenbank, Programmierbarkeit und 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.
[Nach oben]
Transact-SQL
So führen Sie eine gespeicherte Prozedur aus
Stellen Sie eine Verbindung mit dem Database Engine (Datenbankmodul) her.
Klicken Sie in der Standardleiste auf Neue Abfrage.
Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen. Dieses Beispiel zeigt, wie eine gespeicherte Prozedur ausgeführt wird, die einen Parameter erwartet. Im Beispiel wird die gespeicherte Prozedur uspGetEmployeeManagers mit dem @EmployeeID-Parameterwert 6 ausgeführt.
USE AdventureWorks2012;
GO
EXEC dbo.uspGetEmployeeManagers 6;
GO
So legen Sie die automatische Ausführung für eine gespeicherte Prozedur fest oder deaktivieren Sie sie
Stellen Sie eine Verbindung mit dem Database Engine (Datenbankmodul) her.
Klicken Sie in der Standardleiste auf Neue Abfrage.
Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen. Dieses Beispiel zeigt, wie sp_procoption verwendet wird, um eine Prozedur zur automatischen Ausführung festzulegen.
USE AdventureWorks2012;
GO
EXEC sp_procoption @ProcName = '<procedure name>'
, @OptionName = ] 'startup'
, @OptionValue = 'on';
So verhindern Sie die automatische Ausführung einer Prozedur
Stellen Sie eine Verbindung mit dem Database Engine (Datenbankmodul) her.
Klicken Sie in der Standardleiste auf Neue Abfrage.
Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein, und klicken Sie auf Ausführen. Dieses Beispiel zeigt, wie sp_procoption verwendet wird, um die automatische Ausführung einer Prozedur zu deaktivieren.
USE AdventureWorks2012;
GO
EXEC sp_procoption @ProcName = '<procedure name>'
, @OptionValue = 'off';
Beispiel (Transact-SQL)
[Nach oben]
Siehe auch
Verweis
CREATE PROCEDURE (Transact-SQL)
Konzepte
Konfigurieren der Serverkonfigurationsoption Startprozeduren suchen