Freigeben über


Erstellen von CLR-Funktionen

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

Sie können ein Datenbankobjekt innerhalb einer Instanz von SQL Server erstellen, die in einer Assembly programmiert ist, die in der Common Language Runtime (CLR) von .NET Framework erstellt wurde. Zu den Datenbankobjekten, die das umfangreiche Programmiermodell der Common Language Runtime nutzen können, gehören Aggregatfunktionen, Funktionen, gespeicherte Prozeduren, Trigger und Typen.

Zum Erstellen einer CLR-Funktion in SQL Server müssen folgende Schritte ausgeführt werden:

  • Definieren der Funktion als statische Methode einer Klasse in einer Sprache, die von .NET Framework unterstützt wird. Weitere Informationen zum Programmieren von Funktionen in der Common Language Runtime finden Sie unter benutzerdefinierte CLR-Funktionen. Kompilieren Sie dann die Klasse, um eine Assembly im .NET Framework zu erstellen, indem Sie den entsprechenden Sprachcompiler verwenden.

  • Registrieren Sie die Assembly in SQL Server mithilfe der CREATE ASSEMBLY-Anweisung. Weitere Informationen zum Arbeiten mit Assemblys in SQL Server finden Sie unter Assemblies (Datenbank-Engine).

  • Erstellen der Funktion, die auf die registrierte Assembly verweist, mithilfe der CREATE FUNCTION -Anweisung.

Das Ausführen von CLR-Code ist in SQL Server standardmäßig deaktiviert. Sie können Datenbankobjekte erstellen, ändern und ablegen, die auf verwaltete Codemodule verweisen. Diese Verweise werden jedoch nicht in SQL Server ausgeführt, sofern die Serverkonfigurationsoption clr enabled nicht mithilfe von sp_configure aktiviert wird.

Durch die Bereitstellung eines SQL Server-Projekts in Visual Studio wird eine Assembly in der Datenbank registriert, die dem Projekt zugeordnet ist. Bei der Bereitstellung des Projekts werden außerdem CLR-Funktionen in der Datenbank für alle Methoden erstellt, die mit dem SqlFunction-Attribut versehen sind. Weitere Informationen finden Sie unter Bereitstellen von CLR-Datenbankobjekten.

Zugreifen auf externe Ressourcen

Sie können CLR-Funktionen verwenden, um auf externe Ressourcen wie Dateien, Netzwerkressourcen, Webdienste und andere Datenbanken zuzugreifen (einschließlich Remoteinstanzen von SQL Server). CLR-Funktionen können verschiedene Klassen in .NET Framework verwenden, z. B. System.IO, System.WebServices, System.Sqlusw. Die Assembly, die solche Funktionen enthält, sollte für diesen Zweck mindestens mit der EXTERNAL_ACCESS-Berechtigung konfiguriert werden. Weitere Informationen finden Sie unter CREATE ASSEMBLY.

Der verwaltete Anbieter von SQL Client kann für den Zugriff auf Remoteinstanzen von SQL Server verwendet werden. Loopback-Verbindungen mit dem ursprünglichen Server werden in CLR-Funktionen jedoch nicht unterstützt.

Erstellen, Ändern oder Ablegen von Assemblys in SQL Server

Erstellen einer CLR-Funktion

Zugriff auf nativen Code

CLR-Funktionen können auf nativen (nicht verwalteten) Code, wie z.B. in C oder C++ geschriebenen Code, über die Verwendung von PInvoke aus verwaltetem Code zugreifen (siehe Aufruf nativer Funktionen aus verwaltetem Code für weitere Einzelheiten). Sie können Legacycode als CLR-UDFs wiederverwenden oder leistungskritische UDFs in nativen Code schreiben und eine UNSAFE-Assembly verwenden. Informationen zur Verwendung von UNSAFE-Assemblys finden Sie unter Codezugriffssicherheit bei der CLR-Integration.