Ausführen einer gespeicherten Prozedur

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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 verschiedene Möglichkeiten zur Verfügung. Der erste und gebräuchlichste Ansatz besteht darin, dass eine Anwendung oder ein Benutzer die Prozedur aufruft. Ein anderer Ansatz ist das Einrichten der gespeicherten Prozedur zur automatischen Ausführung beim Start einer Instance 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 in einem 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. 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; -- Fails to resolve because SP_heLP doesn't 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

Verwenden Sie die folgenden Empfehlungen für die Ausführung gespeicherter Prozeduren.

Gespeicherte Systemprozeduren

Systemprozeduren beginnen mit dem Präfix sp_. Da sie in allen benutzer- und systemdefinierten Datenbanken logisch angezeigt werden, können Systemprozeduren in jeder Datenbank ausgeführt werden, ohne den Prozedurnamen voll zu qualifizieren. Es ist jedoch ideal, 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;  

Benutzerdefinierte gespeicherte Prozeduren

Beim Ausführen einer benutzerdefinierten Prozedur ist es ideal, den Prozedurnamen mit dem Schemanamen zu qualifizieren. Auf diese Weise lässt sich die Leistung geringfügig verbessern, da die Datenbank-Engine nicht mehrere Schemas durchsuchen muss. Durch Verwenden des Schemanamens können Sie auch verhindern, dass die falsche Prozedur ausgeführt, wenn eine Datenbank in mehreren Schemas über Prozeduren mit dem gleichen Namen verfügt.

Die folgenden Beispiele zeigen die empfohlene Methode für das Ausführen einer benutzerdefinierten Prozedur. Diese Prozedur akzeptiert zwei Eingabeparameter. Informationen zum Angeben von Ein- und Ausgabeparametern finden Sie unter Angeben von Parametern in einer gespeicherten Prozedur.

EXECUTE SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
GO

Oder:

EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
GO  

Wird der nicht gekennzeichnete Name einer benutzerdefinierten Prozedur angegeben, durchsucht die 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 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 muss in der aktuellen Datenbank vorhanden sein.

Sicherheit

Sicherheitsinformationen finden Sie unter EXECUTE AS (Transact-SQL) und EXECUTE AS-Klausel (Transact-SQL).

Berechtigungen

Berechtigungsinformationen finden Sie unter Berechtigungen in AUSFÜHREN (Transact-SQL).

Ausführen gespeicherter Prozeduren

Sie können die Benutzeroberfläche von SQL Server Management Studio (SSMS) oder Transact-SQL in einem SSMS-Abfragefenster verwenden, um eine gespeicherte Prozedur auszuführen. Verwenden Sie immer die neueste Version von SSMS.

Verwenden von SQL Server Management Studio

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instance von SQL Server oder der Azure SQL-Datenbank her, und erweitern Sie dann die Datenbanken.

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

  3. Klicken Sie mit der rechten Maustaste auf die gespeicherte Prozedur, die Sie ausführen möchten, und klicken Sie dann auf Gespeicherte Prozedur ausführen.

  4. Im Dialogfeld Prozedur ausführen gibt der Parameter den Namen der einzelnen Parameter an, der Datentyp gibt den Datentyp an und der Ausgabeparameter gibt an, ob es sich um einen Ausgabeparameter handelt.

    Für jeden Parameter:

    • Geben Sie unter Wert den Wert ein, der für den Parameter verwendet werden soll.
    • Wählen Sie unter Null-Wert übergeben, ob als Wert des Parameters einen NULL-Wert übergeben werden soll.
  5. Klicken Sie auf OK, um die gespeicherte Prozedur auszuführen. Wenn die gespeicherte Prozedur keine Parameter enthält, wählen Sie einfach OK aus.

    Die gespeicherte Prozedur wird ausgeführt, und die Ergebnisse werden im Ergebnis-Bereich angezeigt.

    Wenn Sie beispielsweise die gespeicherte Prozedur SalesLT.uspGetCustomerCompany aus dem Artikel Erstellen einer gespeicherten Prozedur ausführen möchten, geben Sie Cannon als den Parameter @LastName und Chris als den Parameter @FirstName ein. Wählen Sie dann OK aus. Das Verfahren gibt FirstNameChris, LastNameCannon und CompanyNameOutdoor Sporting Goods zurück.

Verwenden von Transact-SQL in einem Abfragefenster

  1. Stellen Sie in SSMS eine Verbindung mit einer Instanz von SQL Server oder Azure SQL Database her.

  2. Wählen Sie aus der Symbolleiste Neue Abfrage aus.

  3. Geben Sie eine EXECUTE-Anweisung mit der folgenden Syntax in das Abfragefenster ein, wobei Werte für alle erwarteten Parameter bereitgestellt werden:

    EXECUTE <ProcedureName> N'<Parameter 1 value>, N'<Parameter x value>;  
    GO  
    

    Die folgende Transact-SQL-Anweisung führt beispielsweise die gespeicherte Prozedur uspGetCustomerCompany und mit Cannon als @LastName-Parameterwert und Chris als @FirstName-Parameterwert aus:

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    GO  
    
  4. Wählen Sie aus der Symbolleiste Ausführen aus. Die gespeicherte Prozedur wird ausgeführt.

Optionen für Parameterwerte

Es gibt mehrere Möglichkeiten, Parameter und Werte in EXECUTE-Anweisungen der gespeicherten Prozedur bereitzustellen. Die folgenden Beispiele zeigen verschiedene Optionen für die EXECUTE-Anweisung.

  • Wenn Sie die Parameterwerte in der gleichen Reihenfolge wie in der gespeicherten Prozedur angeben, müssen Sie die Parameternamen nicht angeben. Beispiel:

    EXEC SalesLT.uspGetCustomerCompany N'Cannon', N'Chris';
    
  • Wenn Sie Parameternamen im @parameter_name=value-Muster angeben, müssen Sie die Parameternamen und -werte nicht in der gleichen Reihenfolge angeben wie sie definiert sind. Beispielsweise sind beide der folgenden Anweisungen gültig:

    EXEC SalesLT.uspGetCustomerCompany @FirstName = N'Chris', @LastName = N'Cannon';
    

    oder:

    EXEC SalesLT.uspGetCustomerCompany @LastName = N'Cannon', @FirstName = N'Chris';
    
  • Wenn Sie das @parameter_name=value-Formular für einen Parameter verwenden, müssen Sie es für alle nachfolgenden Parameter in dieser Anweisung verwenden. Sie können zum Beispiel EXEC SalesLT.uspGetCustomerCompany1 @FirstName = N'Chris', N'Cannon'; nicht verwenden.

Automatische Ausführung beim Start

Gilt für: SQL Server

In SQL Server kann ein Mitglied der sysadmin-Serverrolle sp_procoption verwenden, um eine Prozedur für die automatische Ausführung beim Start festzulegen oder zu löschen. Startprozeduren müssen in der master-Datenbank gespeichert sein und dürfen keine Input- oder Output-Parameter enthalten. Weitere Informationen finden Sie unter sp_procoption (Transact-SQL).

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. Die automatische Ausführung stellt sicher, dass eine solche temporäre Tabelle immer vorhanden ist, wenn tempdb während des SQL Server-Starts 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. Allerdings belegt jede dieser Prozeduren während der Ausführung jeweils einen Arbeitsthread. Wenn Sie beim Systemstart mehrere Prozeduren ausführen müssen, diese aber nicht parallel ausgeführt werden müssen, legen Sie eine Prozedur als Startprozedur fest, und lassen Sie diese Prozedur die anderen Prozeduren aufrufen. Mit dieser Methode 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 Resultsets.

Hinweis

Azure SQL-Datenbank ist so konzipiert, dass Features von den Abhängigkeiten von der master-Datenbank isoliert werden. So sind Transact-SQL-Anweisungen, die Optionen auf Serverebene konfigurieren, in Azure SQL nicht verfügbar. Häufig finden Sie geeignete Alternativen aus anderen Azure-Diensten wie Elastic Jobs (Vorschau) oder Azure Automation.

Festlegen der Prozedur für die automatische Ausführung beim Start

Nur der Systemadministrator (sa) kann eine Prozedur für die automatische Ausführung markieren.

  1. Stellen Sie in SSMS eine Verbindung zum Datenbankmodul her.

  2. Klicken Sie in der Standardsymbolleiste auf Neue Abfrage.

  3. Geben Sie die folgenden sp_procoption-Befehle ein, um eine gespeicherte Prozedur festzulegen, die beim SQL Server-Start automatisch ausgeführt wird.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'   
        , @OptionName = 'startup'   
        , @OptionValue = 'on';
    GO
    
  4. Wählen Sie in der Symbolleiste Ausführen aus.

Beenden der automatischen Ausführung einer Prozedur

Eine sysadmin kann sp_procoption verwenden, um zu verhindern, dass eine Prozedur beim SQL Server-Start automatisch ausgeführt wird.

  1. Stellen Sie in SSMS eine Verbindung zum Datenbankmodul her.

  2. Klicken Sie in der Standardsymbolleiste auf Neue Abfrage.

  3. Geben Sie im Abfragefenster den folgenden Befehl ein.

    EXEC sp_procoption @ProcName = N'<stored procedure name>'      
        , @OptionName = 'startup'
        , @OptionValue = 'off';
    GO
    
  4. Wählen Sie in der Symbolleiste Ausführen aus.