Come posso aggiornare una DLL di assembly (o procedura) CLR senza dover eliminare e ricreare l'assembly in SQL Server (2008 R2)?
Così com'è ora se aggiorno un assembly (ad esempio per aggiungere una nuova funzione), SQL Server non rispetterà la dll aggiornata fino a quando non lascerò cadere l'assembly:
DROP ASSEMBLY CLRFunctions
Msg 6590, Level 16, State 1, Line 1
DROP ASSEMBLY failed because 'CLRFunctions' is referenced by object 'NormalizeString'.
Ma prima di poter rilasciare l'assembly, devo prima eliminare tutte le funzioni che lo fanno riferimento:
DROP FUNCTION NormalizeString
DROP FUNCTION RemoveDiacritics
DROP FUNCTION RemoveCombiningDiacritics
DROP FUNCTION CombineLigatures
....
DROP FUNCTION PseudolocalizeArabic
E poi posso rilasciare l'assemblaggio:
DROP ASSEMBLY CLRFunctions
Ora devo " creare " l'assemblaggio:
CREATE ASSEMBLY CLRFunctions FROM 'c:\foos\CLRFunctions.dll';
E ora devo dare la caccia alla dichiarazione di tutti gli UDF che sono stati registrati prima di cancellarli.
preferirei aggiornare un assembly e fare in modo che SQL Server inizi a utilizzarlo.
Aggiornamento : ho provato casualmente DBCC FREEPROCCACHE
a forzare un "ricompilare", ma SQL Server utilizza ancora il vecchio codice.
Aggiornamento : ho eliminato l'assembly dll CLRFunctions.dll
e SQL Server è ancora in grado di eseguire il codice (senza codice che dovrebbe essere impossibile).