Erstellen von CLR-Funktionen

Sie können ein Datenbankobjekt in einer Instanz von SQL Server erstellen, das in einer Assembly programmiert wird, die in der Microsoft .NET Framework-CLR (Common Language Runtime) erstellt wird. Datenbankobjekte, die das reichhaltige Programmiermodell nutzen können, das von der Common Language Runtime bereitgestellt wird, sind z. B. 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 CLR-benutzerdefinierte Funktionen. Kompilieren Sie die Klasse mithilfe des entsprechenden Sprachcompilers, um eine Assembly in .NET Framework zu erstellen.

  • Registrieren der Assembly in SQL Server mithilfe der CREATE ASSEMBLY-Anweisung. Weitere Informationen zu Assemblys in SQL Server finden Sie unter Assemblys (Database Engine).

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

HinweisHinweis

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 Bereitstellen von CLR-Datenbankobjekten.

HinweisHinweis

Die Funktion zum Ausführen von CLR-Code ist in SQL Server standardmäßig deaktiviert. Sie können Datenbankobjekte, die auf verwaltete Codemodule verweisen, erstellen, ändern oder löschen; diese Verweise werden jedoch nur dann in SQL Server ausgeführt, wenn die Option clr enabled mithilfe von sp_configure (Transact-SQL) aktiviert wird.

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. Hierzu können in .NET Framework verschiedene Klassen verwendet werden, wie System.IO, System.WebServices, System.Sql usw. 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. Loopbackverbindungen 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

Zugreifen auf systemeigenen Code

CLR-Funktionen können für den Zugriff auf systemeigenen (nicht verwalteten) Code verwendet werden, z. B. in C oder C++ geschriebener Code. Dazu wird PInvoke vom verwalteten Code aus ausgeführt (Einzelheiten finden Sie unter Aufrufen systemeigener Funktionen aus verwaltetem Code). Dies kann die Wiederverwendung von Legacycode als CLR-UDFs oder das Programmieren leistungskritischer UDFs in systemeigenem Code ermöglichen. Die Verwendung einer UNSAFE-Assembly wird in diesem Fall vorausgesetzt. Warnhinweise zur Verwendung von UNSAFE-Assemblys finden Sie unter CLR-Integration und Codezugriffssicherheit.