Il file binario dell'assembly viene archiviato come un BLOB nel database, quindi viene portato ovunque il database vada. CLR è abilitato solo sul caso - non sono presenti impostazioni di database specifici per questo.
In ogni caso, perché stai cercando di farlo?
(Non sto cercando di essere polemico; voglio solo sentire i motivi coinvolti, perché forse il problema potrebbe essere risolto in un modo diverso che soddisfa le tue esigenze.)
Non c'è modo di farlo facilmente, se non per mettere l'assembly in un database condiviso.
Detto questo, penso che sia vantaggioso abbracciare l'architettura incentrata sul database, a meno che non ci sia una situazione particolare che abbia ragioni molto convincenti per centralizzare. Il motivo è che mettere l'assembly (o qualsiasi altra cosa) al di fuori del database crea una dipendenza nel proprio ambiente. Questo è esattamente l'approccio opposto adottato da Microsoft con i database contenuti a partire da SQL Server 2012.
Quando si inizia a utilizzare funzionalità come la replica o il clustering, questa dipendenza può potenzialmente aggiungere un'enorme quantità di complessità alla distribuzione, ma anche alle procedure di risoluzione dei problemi e di failover.
Questa architettura è molto meno ovvia per le persone che non hanno familiarità con il sistema (vale a dire, è meno auto-rilevabile e meno auto-documentato).
Se finisci per richiedere una sicurezza diversa in database diversi o qualsiasi cosa implichi una variazione, sei in un mondo ferito.
Se questi database vengono distribuiti ai clienti (sembra che non lo saranno, ma lo dirò per completezza), ciò aggiunge complessità alla procedura di distribuzione, manutenzione e risoluzione dei problemi.
Poiché tutti i database condividono questo codice, se vengono introdotti (o corretti errori), ciò potrebbe potenzialmente interrompere tutte le applicazioni che si basano sui database. Test unitari completi sarebbero indispensabili.
Se si dispone di più database che richiedono la stessa funzionalità, esistono altri modi per ridurre il numero di duplicati coinvolti, che presumo sia il punto dell'esercizio. Anche un assembly CLR abbastanza complesso non occuperà molto spazio di archiviazione fisico rispetto ai dati nel database stesso (quasi sempre), quindi non lo considero un argomento valido a meno che tu non abbia letteralmente migliaia di piccoli database che hanno bisogno di questo montaggio.
Ciò che è possibile fare è modificare altre parti della procedura di distribuzione per questi database per ridurre la duplicazione di origine. Ad esempio, compilare e distribuire l'assembly dalla posizione comune del codice CLR nel controllo del codice sorgente. In alternativa, creare uno script che distribuisce lo stesso assembly nei database. Automatizza questa parte delle cose il più possibile e non sarà un grosso problema.
Concordo sul fatto che ciò che sto suggerendo è un compromesso, perché ci sarà ancora qualche duplicazione, ma questo deve essere bilanciato con gli aspetti negativi coinvolti nell'implementazione di un'architettura che non segue lo standard prescritto. Solo tu puoi decidere cosa è giusto per il tuo ambiente.