Aufrufen der .NET-Runtime in SQL Server-Spracherweiterungen

Gilt für: SQL Server 2019 (15.x) und höhere Versionen

Die SQL Server-Spracherweiterungen verwenden die gespeicherte Systemprozedur sp_execute_external_script als Schnittstelle zum Aufrufen der .NET-Runtime.

In diesem Artikel werden Implementierungsdetails für C#–Code erläutert, die auf SQL Server ausgeführt werden.

Platzieren von C#-Klassen

Sie rufen C#-Code in SQL Server auf, indem Sie kompilierte .NET-Bibliotheken (DLLs) und andere Abhängigkeiten mithilfe der DLL der externen Bibliothek in die Datenbank hochladen. Weitere Informationen finden Sie unter Erstellen einer .NET-DLL über ein C#-Projekt.

Grundlegende Prinzipien

Im Folgenden finden Sie einige grundlegende Prinzipien für das Ausführen von C# auf SQL Server.

  • Kompilierte benutzerdefinierte .NET-Klassen müssen in DLL-Dateien vorhanden sein.

  • Die von Ihnen aufgerufene C#-Methode muss im script-Parameter für die gespeicherte Prozedur bereitgestellt werden.

  • Wenn die Klasse zu einem Paket gehört, muss der packageName bereitgestellt werden.

  • params wird verwendet, um Parameter an eine C#-Klasse zu übergeben. Das Aufrufen einer Methode, die Argumente erfordert, wird nicht unterstützt. Daher stellen Parameter die einzige Möglichkeit dar, um Argumentwerte an Ihre Methode zu übergeben.

Hinweis

Dieser Hinweis behandelt nochmals unterstützte und nicht unterstützte Vorgänge, spezifisch für C# in SQL Server 2019 (15.x) und spätere Versionen. In der gespeicherten Prozedur werden Eingabeparameter unterstützt, während Ausgabeparameter nicht unterstützt werden.

Aufrufen von C#-Code

Die gespeicherte Systemprozedur sp_execute_external_script dient als Schnittstelle für das Aufrufen der .NET-Runtime. Das folgende Beispiel zeigt ein sp_execute_external_script unter Verwendung der .NET-Erweiterung sowie Parameter für das Angeben von Pfad, Skript und benutzerdefiniertem Code.

Hinweis

Sie müssen nicht definieren, welche Methode aufgerufen werden soll. Standardmäßig wird eine Methode namens Execute aufgerufen. Dies bedeutet, dass Sie das Microsoft Extensibility SDK für die C#-Erweiterung in SQL Server befolgen und eine Execute-Methode in Ihrer C#-Klasse implementieren müssen.

DECLARE @param1 INT;

SET @param1 = 3;

EXEC sp_execute_external_script
    @language = N'dotnet',
    @script = N'<PackageName>.<ClassName>',
    @input_data_1 = N'<Input Query>',
    @param1 = @param1;

Verwenden externer Bibliotheken

In SQL Server 2019 (15.x) und späteren Versionen können Sie externe Bibliotheken für die C#-Sprache unter Windows verwenden. Sie können Ihre Klassen in einer DLL-Datei kompilieren und die DLL und andere Abhängigkeiten mit der DDL EXTERNE BIBLIOTHEK ERSTELLEN in die Datenbank hochladen.

Beispiel für das Hochladen einer DLL-Datei mit externer Bibliothek:

CREATE EXTERNAL LIBRARY [dotnetlibrary]
FROM (CONTENT = '<local path to .dll file>')
WITH (LANGUAGE = 'dotnet');
GO

Durch das Erstellen einer externen Bibliothek hat SQL Server automatisch Zugriff auf die C#-Klassen, und Sie müssen keine speziellen Berechtigungen für den Pfad festlegen.

Der folgende Code ist ein Beispiel für das Aufrufen der Execute-Methode in Klasse MyClass aus einem Paket MyPackage, das als externe Bibliothek hochgeladen wurde:

EXEC sp_execute_external_script
    @language = N'dotnet',
    @script = N'MyPackage.MyClass',
    @input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));

Weitere Informationen finden Sie unter CREATE EXTERNAL LANGUAGE.