Wie kann ich eine CLR-Funktions- (oder Prozedur-) Assembly-DLL aktualisieren, ohne die Assembly in SQL Server (2008 R2) löschen und neu erstellen zu müssen?
Wie es jetzt steht, wenn ich eine Assembly aktualisiere (z. B. um eine neue Funktion hinzuzufügen), wird SQL Server die aktualisierte DLL nicht berücksichtigen, bis ich die Assembly lösche:
DROP ASSEMBLY CLRFunctions
Msg 6590, Level 16, State 1, Line 1
DROP ASSEMBLY failed because 'CLRFunctions' is referenced by object 'NormalizeString'.
Aber bevor ich die Assembly löschen kann, muss ich zuerst alle Funktionen löschen , die darauf verweisen:
DROP FUNCTION NormalizeString
DROP FUNCTION RemoveDiacritics
DROP FUNCTION RemoveCombiningDiacritics
DROP FUNCTION CombineLigatures
....
DROP FUNCTION PseudolocalizeArabic
Und dann kann ich die Baugruppe fallen lassen:
DROP ASSEMBLY CLRFunctions
Jetzt muss ich die Baugruppe " erstellen ":
CREATE ASSEMBLY CLRFunctions FROM 'c:\foos\CLRFunctions.dll';
Und jetzt muss ich die Deklaration aller UDFs suchen, die registriert wurden , bevor ich sie löschte.
Ich würde lieber eine Assembly aktualisieren und SQL Server damit beginnen lassen, sie zu verwenden.
Update : Ich habe zufällig versucht DBCC FREEPROCCACHE
, eine "Neukompilierung" zu erzwingen, aber SQL Server verwendet immer noch den alten Code.
Update : Ich habe die Assembly-DLL gelöscht CLRFunctions.dll
und SQL Server ist weiterhin in der Lage, den Code auszuführen (ohne Code, der unmöglich sein sollte).