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, das in einer Assembly programmiert ist, die in der Microsoft .NET Framework Common Language Runtime (CLR) 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 der 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 löschen, die auf verwaltete Code-Module verweisen, aber diese Verweise werden in SQL Server nicht ausgeführt, es sei denn, Sie aktivieren die Option clr enabled mit sp_configure (Transact-SQL).
Bei der Bereitstellung eines SQL Server-Projekts in Microsoft Visual Studio wird eine Assembly in der Datenbank registriert, die für das Projekt angegeben wurde. Bei der Bereitstellung des Projekts werden auch CLR-Funktionen in der Datenbank für alle Methoden erstellt, die mit dem SqlFunction -Attribut versehen sind. Weitere Informationen finden Sie unter Deploying CLR Database Objects.
Zugreifen auf externe Ressourcen
CLR-Funktionen können verwendet werden, um auf externe Ressourcen wie z. B. Dateien, Netzwerkressourcen, Webdienste oder andere Datenbanken (einschließlich Remoteinstanzen von SQL Server) zuzugreifen. Dies kann durch die Verwendung verschiedener Klassen im .NET Framework erreicht werden, wie z.B. System.IO
, System.WebServices
, System.Sql
, und so weiter. 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 (Transact-SQL). 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.
So erstellen, ändern oder löschen Sie Assemblys in SQL Server
So erstellen Sie eine 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). Dies ermöglicht Ihnen die Wiederverwendung von Legacy-Code als CLR UDFs oder das Schreiben von leistungsrelevanten UDFs in nativem Code und erfordert die Verwendung einer UNSAFE-Assembly. Warnhinweise zur Verwendung von UNSAFE-Assemblys finden Sie unter CLR Integration Code Access Security .