Ausführen einer gespeicherten Prozedur

In diesem Thema wird beschrieben, wie Sie eine gespeicherte Prozedur in SQL Server 2014 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 einer*m Benutzer*in aufgerufen wird, wird das Transact-SQL-Schlüsselwort EXECUTE oder EXEC explizit im Aufruf angegeben. Alternativ kann die Prozedur ohne den Schlüsselwort (keyword) aufgerufen und ausgeführt werden, wenn die Prozedur die erste Anweisung im Transact-SQL-Batch ist.

In diesem Thema

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 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 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 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 AdventureWorks2012;  
    GO  
    EXEC dbo.uspGetEmployeeManagers @BusinessEntityID = 50;  
    

    -Oder-

    EXEC AdventureWorks2012.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:

    1. Das sys -Schema der aktuellen Datenbank.

    2. 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.

    3. Das dbo -Schema in der aktuellen Datenbank

  • Automatisches Ausführen von gespeicherten Prozeduren

    Für die automatische Ausführung markierte Prozeduren werden jedes Mal ausgeführt, wenn SQL Server gestartet wird und die master Datenbank während dieses Startvorgangs wiederhergestellt wird. 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 tempdbauszuführen, z. B. das Erstellen einer globalen temporären Tabelle. Dadurch wird sichergestellt, dass eine solche temporäre Tabelle immer vorhanden ist, wenn tempdb während SQL Server Start 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 sabefinden und darf keine Eingabe- oder Ausgabeparameter enthalten.

    Verwenden Sie sp_procoption für folgende Aufgaben:

    1. Angeben einer vorhandenen Prozedur als Startprozedur.

    2. 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).

Verwendung von SQL Server Management Studio

So führen Sie eine gespeicherte Prozedur aus

  1. Stellen Sie im Objekt-Explorereine Verbindung mit einer Instanz von SQL Server-Datenbank-Engineher, erweitern Sie diese Instanz und dann Datenbanken.

  2. Erweitern Sie die gewünschte Datenbank, Programmierbarkeitund dann Gespeicherte Prozeduren.

  3. Klicken Sie mit der rechten Maustaste auf die gewünschte benutzerdefinierte gespeicherte Prozedur, und klicken Sie dann auf Gespeicherte Prozedur ausführen.

  4. 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.

  5. Klicken Sie auf OK, um die gespeicherte Prozedur auszuführen.

Verwenden von Transact-SQL

So führen Sie eine gespeicherte Prozedur aus

  1. Stellen Sie eine Verbindung mit dem Datenbank-Engineher.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. 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 uspGetEmployeeManagers gespeicherte Prozedur mit dem als @EmployeeID Parameter angegebenen Wert 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

  1. Stellen Sie eine Verbindung mit dem Datenbank-Engineher.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. 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 festzulegen.

USE AdventureWorks2012;  
GO  
EXEC sp_procoption @ProcName = '<procedure name>'   
    , @OptionName = ] 'startup'   
    , @OptionValue = 'on';  

So verhindern Sie die automatische Ausführung einer Prozedur

  1. Stellen Sie eine Verbindung mit dem Datenbank-Engineher.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. 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 beenden.

USE AdventureWorks2012;  
GO  
EXEC sp_procoption @ProcName = '<procedure name>'   
    , @OptionValue = 'off';  

Beispiel (Transact-SQL)

Weitere Informationen

Angeben von Parametern
Konfigurieren der Serverkonfigurationsoption Startprozeduren suchen
EXECUTE (Transact-SQL)
CREATE PROCEDURE (Transact-SQL)
Gespeicherte Prozeduren (Datenbank-Engine)