Le binaire d'assembly est stocké comme un blob dans la base de données, il est donc transporté partout où la base de données va. CLR n'est activé que sur l' instance - il n'y a pas de paramètres spécifiques à la base de données pour cela.
Dans tous les cas, pourquoi essayez-vous de faire cela?
(Je n'essaie pas d'être argumentatif; je veux juste entendre les motifs impliqués, parce que peut-être le problème pourrait être résolu d'une manière différente qui répond à vos besoins.)
Il n'y a aucun moyen de le faire facilement, sauf pour placer l'assembly dans une base de données partagée.
Cela dit, je pense qu'il est avantageux d'adopter l'architecture centrée sur la base de données, à moins qu'il n'y ait une situation particulière qui a des raisons très impérieuses de centraliser. La raison en est que le fait de placer l'assembly (ou quoi que ce soit d'ailleurs) en dehors de la base de données crée une dépendance dans votre environnement. Il s'agit précisément de l'approche inverse que Microsoft met en place avec les bases de données contenues à partir de SQL Server 2012.
Lorsque vous commencez à avoir besoin d'utiliser des fonctionnalités telles que la réplication ou la mise en cluster, cette dépendance peut potentiellement ajouter une énorme quantité de complexité au déploiement, mais également aux procédures de dépannage et de basculement.
Cette architecture est beaucoup moins évidente pour les personnes qui ne connaissent pas le système (c'est-à-dire qu'elle est moins auto-détectable et moins auto-documentée).
Si vous finissez par exiger une sécurité différente dans différentes bases de données, ou tout ce qui implique des variations, vous êtes dans un monde de mal.
Si ces bases de données sont déployées auprès des clients (on dirait qu'elles ne le seront pas, mais je le dirai pour être complet), cela ajoute de la complexité à la procédure de déploiement, à la maintenance et au dépannage.
Étant donné que toutes les bases de données partageraient ce code, si des bogues étaient introduits (ou corrigés!), Cela pourrait potentiellement casser toutes les applications qui s'appuient sur les bases de données. Des tests unitaires complets seraient absolument indispensables.
Si vous avez plusieurs bases de données qui ont besoin de la même fonctionnalité, il existe d'autres moyens de réduire la quantité de duplication impliquée, ce qui, je suppose, est le but de l'exercice. Même un assemblage CLR assez complexe ne prendra pas beaucoup d'espace de stockage physique par rapport aux données dans la base de données elle-même (presque toujours), donc je ne vois pas cela comme un argument valide à moins que vous n'ayez littéralement des milliers de petites bases de données qui en ont besoin Assemblée.
Vous pouvez modifier d'autres parties de la procédure de déploiement de ces bases de données pour réduire la duplication source. Par exemple, générez et déployez l'assembly à partir de l'emplacement commun du code CLR dans le contrôle de code source. Ou, créez un script qui déploie le même assembly dans les bases de données. Automatisez autant que possible cette partie des choses, et ce ne sera pas un gros problème.
Je conviens que ce que je propose est un compromis, car il y aura toujours des doubles emplois, mais cela doit être équilibré avec les inconvénients liés à la mise en œuvre d'une architecture qui ne respecte pas la norme prescrite. Vous seul pouvez décider de ce qui convient à votre environnement.