Bagaimana saya bisa memperbarui dll fungsi CLR (atau prosedur) perakitan tanpa harus menjatuhkan dan membuat ulang perakitan di SQL Server (2008 R2)?
Seperti berdiri sekarang jika saya memperbarui majelis (misalnya untuk menambah fungsi baru), SQL Server tidak akan menghormati dll diperbarui sampai saya jatuhkan majelis:
DROP ASSEMBLY CLRFunctions
Msg 6590, Level 16, State 1, Line 1
DROP ASSEMBLY failed because 'CLRFunctions' is referenced by object 'NormalizeString'.
Tetapi sebelum saya dapat menghentikan perakitan, saya harus terlebih dahulu menghapus semua fungsi yang merujuknya:
DROP FUNCTION NormalizeString
DROP FUNCTION RemoveDiacritics
DROP FUNCTION RemoveCombiningDiacritics
DROP FUNCTION CombineLigatures
....
DROP FUNCTION PseudolocalizeArabic
Dan kemudian saya bisa menjatuhkan perakitan:
DROP ASSEMBLY CLRFunctions
Sekarang saya harus " membuat " perakitan:
CREATE ASSEMBLY CLRFunctions FROM 'c:\foos\CLRFunctions.dll';
Dan sekarang saya harus berburu deklarasi semua UDF yang telah terdaftar sebelum saya dihapus mereka.
saya lebih suka memperbarui majelis, dan SQL Server mulai menggunakannya.
Pembaruan : saya mencoba secara acak DBCC FREEPROCCACHE
untuk memaksa "kompilasi ulang", tetapi SQL Server masih menggunakan kode lama.
Pembaruan : saya menghapus dll perakitan CLRFunctions.dll
, dan SQL Server masih dapat menjalankan kode (tanpa kode yang seharusnya tidak mungkin).