Erstellen von CLR-Funktionen

Gilt für: SQL Server 2016 (13.x) und spätere Versionen

Sie können ein Datenbankobjekt in einer Instanz von SQL Server erstellen, die in einer Assembly programmiert ist, die in der Common Language Runtime (CLR) von Microsoft .NET Framework erstellt wurde. Datenbankobjekte, die das umfangreiche Programmiermodell verwenden können, das von der Common Language Runtime bereitgestellt wird, umfassen Aggregatfunktionen, Funktionen, gespeicherte Prozeduren, Trigger und Typen.

Das Erstellen einer CLR-Funktion in SQL Server umfasst die folgenden Schritte:

  • Definieren Sie die 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 in .NET Framework mithilfe des entsprechenden Sprachcompilers zu erstellen.

  • Registrieren Sie die Assembly in SQL Server mithilfe der CREATE ASSEMBLY-Anweisung. Weitere Informationen zu Assemblys in SQL Server finden Sie unter Assemblys (Database Engine).For more information about assemblies in SQL Server, see Assemblies (Database 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, es sei denn, Sie aktivieren die option clr-aktiviert mit sp_configure (Transact-SQL).

Durch die 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 für den Zugriff auf externe Ressourcen wie Dateien, Netzwerkressourcen, Webdienste, andere Datenbanken (einschließlich Remoteinstanzen von SQL Server) verwendet werden. Dies kann mithilfe verschiedener Klassen im .NET Framework erreicht werden, z System.IO. B. , 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 (Transact-SQL).For more information, see CREATE ASSEMBLY (Transact-SQL). Der vom SQL Client verwaltete Anbieter kann für den Zugriff auf Remoteinstanzen von SQL Server verwendet werden. Loopbackverbindungen mit dem ursprünglichen Server werden jedoch in CLR-Funktionen nicht unterstützt.

So erstellen, ändern oder löschen Sie Assemblys in SQL Server

So erstellen Sie eine CLR-Funktion

Zugreifen auf nativen Code

CLR-Funktionen können über die Verwendung von PInvoke verwaltetem Code auf systemeigenen (nicht verwalteten) Code zugreifen, z. B. code, der in C oder C++ geschrieben wurde (details hierzu finden Sie unter Aufrufen nativer Funktionen aus verwaltetem Code ). Auf diese Weise können Sie Legacycode als CLR-UDFs wiederverwenden oder leistungskritische UDFs in systemeigenem Code schreiben und eine UNSAFE-Assembly verwenden. Warnhinweise zur Verwendung von UNSAFE-Assemblys finden Sie unter CLR Integration Code Access Security .

Siehe auch