Recherche…


Activer le CLR sur la base de données

Les procédures CLR ne sont pas activées par défaut. Vous devez exécuter les requêtes suivantes pour activer CLR:

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'clr enabled', 1;
GO
RECONFIGURE;
GO

De plus, si un module CLR nécessite un accès externe, vous devez définir la propriété TRUSTWORTHY sur ON dans votre base de données:

ALTER DATABASE MyDbWithClr SET TRUSTWORTHY ON

Ajout de .dll contenant des modules Sql CLR

Les procédures, fonctions, déclencheurs et types écrits en langues .Net sont stockés dans des fichiers .dll. Une fois que vous créez un fichier .dll contenant des procédures CLR, vous devez l'importer dans SQL Server:

CREATE ASSEMBLY MyLibrary
FROM 'C:\lib\MyStoredProcedures.dll'
    WITH PERMISSION_SET = EXTERNAL_ACCESS

PERMISSION_SET est Safe par défaut, ce qui signifie que le code dans .dll n'a pas besoin d'une autorisation pour accéder aux ressources externes (par exemple, fichiers, sites Web, autres serveurs) et qu'il n'utilisera pas de code natif pouvant accéder à la mémoire.

PERMISSION_SET = EXTERNAL_ACCESS est utilisé pour marquer les assemblys contenant du code qui accéderont aux ressources externes.

Vous pouvez trouver des informations sur les fichiers d'assemblage CLR actuels dans la vue sys.assemblies:

SELECT *
FROM sys.assemblies asms
WHERE is_user_defined = 1

Créer une fonction CLR dans SQL Server

Si vous avez créé la fonction .Net, l'avez compilée dans .dll et importée dans SQL Server en tant qu'assemblage, vous pouvez créer une fonction définie par l'utilisateur qui référence la fonction dans cet assemblage:

CREATE FUNCTION dbo.TextCompress(@input nvarchar(max)) 
RETURNS varbinary(max) 
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].TextCompress 

Vous devez spécifier le nom de la fonction et de la signature avec des paramètres d'entrée et renvoyer des valeurs correspondant à la fonction .Net. Dans la clause AS EXTERNAL NAME, vous devez spécifier le nom de l'assembly, le nom de l'espace de nom / classe où cette fonction est placée et le nom de la méthode dans la classe qui contient le code qui sera exposé en tant que fonction.

Vous pouvez trouver des informations sur les fonctions CLR à l'aide de la requête suivante:

SELECT * FROM dbo.sysobjects WHERE TYPE ='FS'

Créer un type CLR défini par l'utilisateur dans SQL Server

Si vous avez créé une classe .Net qui représente un type défini par l'utilisateur, qui l'a compilé dans .dll et l'a importé dans un serveur SQL en tant qu'assemblage, vous pouvez créer une fonction définie par l'utilisateur qui référence cette classe:

CREATE TYPE dbo.Point
EXTERNAL NAME MyLibrary.[Name.Space.Point]

Vous devez spécifier le nom du type qui sera utilisé dans les requêtes T-SQL. Dans la clause EXTERNAL NAME, vous devez spécifier le nom de l'assembly, l'espace de noms et le nom de la classe.

Créer une procédure CLR dans SQL Server

Si vous avez créé une méthode .Net dans une classe, l'avez compilée dans .dll et importée dans SQL Server en tant qu'assemblage, vous pouvez créer une procédure stockée définie par l'utilisateur qui fait référence à la méthode dans cet assembly:

CREATE PROCEDURE dbo.DoSomethng(@input nvarchar(max)) 
AS EXTERNAL NAME MyLibrary.[Name.Space.ClassName].DoSomething

Vous devez spécifier le nom de la procédure et la signature avec les paramètres d'entrée correspondant à la méthode .Net. Dans la clause AS EXTERNAL NAME, vous devez spécifier le nom de l'assembly, le nom de l'espace de nom / classe où cette procédure est placée et le nom de la méthode dans la classe contenant le code qui sera exposé en tant que procédure.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow