Microsoft SQL Server
Common Language Runtime Integration
Suche…
Aktivieren Sie CLR für die Datenbank
CLR-Prozeduren sind standardmäßig nicht aktiviert. Sie müssen die folgenden Abfragen ausführen, um CLR zu aktivieren:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO
Wenn für ein CLR-Modul ein externer Zugriff erforderlich ist, sollten Sie die TRUSTWORTHY-Eigenschaft in Ihrer Datenbank auf ON setzen:
ALTER DATABASE MyDbWithClr SET TRUSTWORTHY ON
Hinzufügen von DLL-Dateien, die SQL-CLR-Module enthalten
In .Net-Sprachen geschriebene Prozeduren, Funktionen, Trigger und Typen werden in DLL-Dateien gespeichert. Nachdem Sie eine DLL-Datei mit CLR-Prozeduren erstellt haben, sollten Sie sie in SQL Server importieren:
CREATE ASSEMBLY MyLibrary
FROM 'C:\lib\MyStoredProcedures.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS
PERMISSION_SET ist standardmäßig sicher, was bedeutet, dass Code in .dll keine Berechtigung für den Zugriff auf externe Ressourcen (z. B. Dateien, Websites, andere Server) benötigt und dass kein native Code verwendet wird, der auf den Speicher zugreifen kann.
PERMISSION_SET = EXTERNAL_ACCESS wird zum Markieren von Assemblys verwendet, die Code enthalten, der auf externe Ressourcen zugreift.
Informationen zu den aktuellen CLR-Assembly-Dateien finden Sie in der Ansicht sys.assemblies:
SELECT *
FROM sys.assemblies asms
WHERE is_user_defined = 1
Erstellen Sie eine CLR-Funktion in SQL Server
Wenn Sie eine .NET-Funktion erstellt, in eine DLL-Datei kompiliert und als Assembly in den SQL-Server importiert haben, können Sie eine benutzerdefinierte Funktion erstellen, die auf Funktionen in dieser Assembly verweist:
CREATE FUNCTION dbo.TextCompress(@input nvarchar(max))
RETURNS varbinary(max)
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].TextCompress
Sie müssen den Namen der Funktion und die Signatur mit Eingabeparametern angeben und Werte zurückgeben, die der .Net-Funktion entsprechen. In der Klausel AS EXTERNAL NAME müssen Sie den Namen der Assembly, den Namespace / Class-Namen, an dem diese Funktion platziert ist, und den Namen der Methode in der Klasse angeben, die den Code enthält, der als Funktion verfügbar gemacht wird.
Informationen zu den CLR-Funktionen finden Sie in der folgenden Abfrage:
SELECT * FROM dbo.sysobjects WHERE TYPE ='FS'
Erstellen Sie einen benutzerdefinierten CLR-Typ in SQL Server
Wenn Sie eine .Net-Klasse erstellen, die einen benutzerdefinierten Typ darstellt, in eine DLL-Datei kompiliert und als Assembly in den SQL-Server importiert hat, können Sie eine benutzerdefinierte Funktion erstellen, die auf diese Klasse verweist:
CREATE TYPE dbo.Point
EXTERNAL NAME MyLibrary.[Name.Space.Point]
Sie müssen den Namen des Typs angeben, der in T-SQL-Abfragen verwendet wird. In der Klausel EXTERNAL NAME müssen Sie den Namen der Assembly, den Namespace und den Klassennamen angeben.
Erstellen Sie eine CLR-Prozedur in SQL Server
Wenn Sie die .Net-Methode in einer Klasse erstellt, in eine DLL-Datei kompiliert und als Assembly in den SQL-Server importiert haben, können Sie eine benutzerdefinierte gespeicherte Prozedur erstellen, die auf die Methode in dieser Assembly verweist:
CREATE PROCEDURE dbo.DoSomethng(@input nvarchar(max))
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].DoSomething
Sie müssen den Namen der Prozedur und die Signatur mit Eingabeparametern angeben, die der .Net-Methode entsprechen. In der Klausel AS EXTERNAL NAME müssen Sie den Namen der Assembly, den Namespace / Class-Namen, an dem diese Prozedur platziert wird, und den Namen der Methode in der Klasse angeben, die den Code enthält, der als Prozedur verfügbar gemacht wird.