Die Assembly-Binärdatei wird als Blob in der Datenbank gespeichert, sodass sie überall in der Datenbank gespeichert wird. CLR ist nur für die Instanz aktiviert - dafür gibt es keine datenbankspezifischen Einstellungen.
Warum versuchst du es auf jeden Fall?
(Ich versuche nicht, argumentativ zu sein. Ich möchte nur die Gründe dafür herausfinden, weil das Problem möglicherweise auf eine andere Art und Weise gelöst werden könnte, die Ihren Bedürfnissen entspricht.)
Es gibt keine einfache Möglichkeit, dies zu tun, außer die Assembly in eine gemeinsam genutzte Datenbank zu stellen.
Trotzdem halte ich es für vorteilhaft, die datenbankzentrierte Architektur zu nutzen, es sei denn, es gibt eine bestimmte Situation, die sehr zwingende Gründe für eine Zentralisierung hat. Der Grund dafür ist, dass das Verschieben der Assembly (oder anderer Elemente) außerhalb der Datenbank zu einer Abhängigkeit in Ihrer Umgebung führt. Dies ist genau der umgekehrte Ansatz, auf den Microsoft ab SQL Server 2012 bei enthaltenen Datenbanken setzt.
Wenn Sie Funktionen wie Replikation oder Clustering benötigen, kann diese Abhängigkeit die Bereitstellung, aber auch die Fehlerbehebung und Failover-Prozeduren erheblich komplexer gestalten.
Diese Architektur ist für Leute, die mit dem System nicht vertraut sind, viel weniger offensichtlich (dh sie ist weniger selbstentdeckbar und weniger selbstdokumentierend).
Wenn Sie in verschiedenen Datenbanken unterschiedliche Sicherheitsanforderungen haben oder wenn Sie etwas mit Variationen zu tun haben, befinden Sie sich in einer Welt voller Verletzungen.
Wenn diese Datenbanken für Kunden bereitgestellt werden (das hört sich so an, als ob dies nicht der Fall wäre, aber der Vollständigkeit halber sage ich das), erhöht dies die Komplexität des Bereitstellungsverfahrens, der Wartung und der Fehlerbehebung.
Da alle Datenbanken diesen Code gemeinsam nutzen, können bei Auftreten (oder Behebung!) Von Fehlern möglicherweise alle Anwendungen beschädigt werden, die auf die Datenbanken angewiesen sind. Umfassende Unit-Tests wären ein absolutes Muss.
Wenn Sie über mehrere Datenbanken verfügen, für die dieselbe Funktionalität erforderlich ist, gibt es andere Möglichkeiten, um die Anzahl der Duplikate zu verringern. Ich gehe davon aus, dass dies der Sinn der Übung ist. Sogar eine recht komplexe CLR-Assembly nimmt im Vergleich zu den Daten in der Datenbank selbst (fast immer) nicht viel physischen Speicherplatz ein. Daher sehe ich das nicht als gültiges Argument, es sei denn, Sie haben buchstäblich Tausende winziger Datenbanken, die dies benötigen Versammlung.
Sie können andere Teile der Bereitstellungsprozedur für diese Datenbanken ändern, um die Duplizierung der Quelle zu verringern. Erstellen und implementieren Sie die Assembly beispielsweise am gemeinsamen Speicherort des CLR-Codes in der Quellcodeverwaltung. Oder erstellen Sie ein Skript, das dieselbe Assembly für die Datenbanken bereitstellt. Automatisieren Sie diesen Teil der Dinge so weit wie möglich und es wird keine große Sache.
Ich bin damit einverstanden, dass das, was ich vorschlage, ein Kompromiss ist, da es immer noch einige Überschneidungen geben wird, aber das muss mit den negativen Aspekten in Verbindung gebracht werden, die mit der Implementierung einer Architektur verbunden sind, die nicht dem vorgeschriebenen Standard entspricht. Nur Sie können entscheiden, was für Ihre Umgebung richtig ist.