Partage via


Créer des fonctions CLR

S’applique à : SQL Server 2016 (13.x) et versions ultérieures

Vous pouvez créer un objet de base de données à l’intérieur d’une instance de SQL Server qui est programmée dans un assembly créé dans le Common Language Runtime (CLR) du .NET Framework. Les objets de base de données peuvent utiliser le modèle de programmation élaboré fourni par les fonctions agrégées, les fonctions, les procédures stockées, les déclencheurs et les types.

La création d'une fonction CLR dans SQL Server comprend les étapes suivantes :

  • Définissez la fonction en tant que méthode statique d'une classe dans un langage reconnu par le .NET Framework. Pour plus d’informations sur la façon de programmer des fonctions dans le Common Language Runtime, consultez fonctions CLR définies par l’utilisateur. Ensuite, compilez la classe pour créer un assembly dans le .NET Framework à l'aide du compilateur du langage approprié.

  • Inscrivez l’assembly dans SQL Server à l’aide de l’instruction CREATE ASSEMBLY. Pour plus d’informations sur les assemblys dans SQL Server, consultez Assemblys (moteur de base de données).

  • Créez la fonction qui fait référence à l’assembly inscrit à l’aide de l’instruction CREATE FUNCTION .

L'exécution du code CLR est désactivée par défaut dans SQL Server. Vous pouvez créer, modifier et supprimer des objets de base de données qui référencent des modules de code managé, mais ces références ne s’exécutent pas dans SQL Server, sauf si l’option de configuration de serveur clr activée est activée à l’aide de sp_configure.

Le déploiement d’un projet SQL Server dans Visual Studio inscrit un assembly dans la base de données spécifiée pour le projet. Le déploiement du projet crée également des fonctions CLR dans la base de données pour toutes les méthodes annotées avec l’attribut SqlFunction. Pour plus d’informations, consultez Déployer des objets de base de données CLR.

Accéder à des ressources externes

Vous pouvez utiliser des fonctions CLR pour accéder à des ressources externes telles que des fichiers, des ressources réseau, des services web et d’autres bases de données (notamment des instances distantes de SQL Server). Les fonctions CLR peuvent utiliser différentes classes dans .NET Framework, telles que System.IO, System.WebServices, System.Sql, etc. L’assembly qui contient ces fonctions doit au moins être configuré avec le jeu d’autorisations EXTERNAL_ACCESS à cet effet. Pour plus d’informations, consultez CREATE ASSEMBLY.

Vous pouvez recourir au fournisseur managé Client SQL pour accéder à des instances distantes de SQL Server. Cependant, les connexions de bouclage au serveur d'origine ne sont pas gérées dans les fonctions CLR.

Créer, modifier ou supprimer des assemblys dans SQL Server

Créer une fonction CLR

Accéder au code natif

Les fonctions CLR permettent d’accéder au code natif (non managé), tel que le code écrit en C ou C++, via l’utilisation de PInvoke à partir du code managé (pour plus d’informations, consultez Appel à des fonctions natives à partir de code managé ). Vous pouvez réutiliser le code hérité en tant que fonctions définies par l’utilisateur CLR ou écrire des fonctions définies par l’utilisateur critiques en matière de performances dans le code natif et nécessite l’utilisation d’un assembly UNSAFE. Voir CLR integration Code Access Security pour les mises en garde concernant l'utilisation des assemblagesUNSAFE.