Partager 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 dans une instance de SQL Server programmée dans un assembly créé dans le CLR (Common Language Runtime) Microsoft .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 programmation des fonctions dans le CLR, 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 font référence à des modules de code géré, mais ces références ne s'exécuteront pas dans SQL Server à moins que vous n'activiez l'option clr enabled à l'aide de sp_configure (Transact-SQL).

Le déploiement d’un projet SQL Server dans Microsoft Visual Studio a pour effet d’inscrire un assembly dans la base de données qui a été spécifiée pour le projet. Le déploiement du projet crée aussi les 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éploiement d’objets de base de données CLR.

Accéder à des ressources externes

Les fonctions CLR peuvent être utilisées 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). Pour cela, vous devez utiliser différentes classes dans le .NET Framework, telles que System.IO, System.WebServices, System.Sql, etc. L'assembly qui contient ces fonctions doit être configuré au minimum avec l'autorisation EXTERNAL_ACCESS définie dans ce but. Pour plus d’informations, consultez CREATE ASSEMBLY (Transact-SQL). 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.

Pour créer, modifier ou supprimer des assemblys dans SQL Server

Pour 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 ainsi réutiliser du code hérité en tant qu'UDF CLR ou écrire des fonctions UDF critiques pour les performances en code natif, tout en utilisant un assembly UNSAFE. Pour connaître les précautions à prendre lors de l’utilisation des assemblys UNSAFE, consultez Sécurité d’accès du code de l’intégration du CLR .

Voir aussi