Créer des fonctions CLR

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

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) de Microsoft .NET Framework. Les objets de base de données qui peuvent utiliser le modèle de programmation enrichi fourni par le Common Language Runtime incluent des fonctions d’agrégation, des fonctions, des procédures stockées, des déclencheurs et des types.

La création d’une fonction CLR dans SQL Server implique les étapes suivantes :

  • Définissez la fonction en tant que méthode statique d’une classe dans un langage pris en charge 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 générer un assembly dans .NET Framework à l’aide du compilateur de 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 vous activez l’option clr activée à l’aide de sp_configure (Transact-SQL).

Le déploiement d’un projet SQL Server dans Microsoft Visual Studio inscrit un assembly dans la base de données 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, d’autres bases de données (notamment des instances distantes de SQL Server). Cela peut être obtenu à l’aide de différentes classes dans le .NET Framework, telles que System.IO, , System.WebServicesSystem.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). Le fournisseur managé SQL Client peut être utilisé pour accéder aux instances distantes de SQL Server. Toutefois, les connexions de bouclage au serveur d’origine ne sont pas prises en charge 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 peuvent accéder au code natif (non managé), tel que le code écrit en C ou C++, via l’utilisation de code managé (voir Appel de PInvoke fonctions natives à partir du code managé pour plus d’informations). Cela peut vous permettre de réutiliser le code hérité en tant que fonctions définies par l’utilisateur CLR ou d’écrire des fonctions définies par l’utilisateur critiques pour les performances dans du code natif et nécessite l’utilisation d’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