如何在不删除并在SQL Server(2008 R2)中重新创建程序集的情况下更新CLR函数(或过程)程序集dll?
就目前而言,如果我更新程序集(例如添加新功能),则在我删除程序集之前,SQL Server将不接受更新的dll:
DROP ASSEMBLY CLRFunctions
Msg 6590, Level 16, State 1, Line 1
DROP ASSEMBLY failed because 'CLRFunctions' is referenced by object 'NormalizeString'.
但是在删除程序集之前,必须先删除所有引用该程序集的函数:
DROP FUNCTION NormalizeString
DROP FUNCTION RemoveDiacritics
DROP FUNCTION RemoveCombiningDiacritics
DROP FUNCTION CombineLigatures
....
DROP FUNCTION PseudolocalizeArabic
并且然后我可以删除这个组件:
DROP ASSEMBLY CLRFunctions
现在我必须“ 创建 ”程序集:
CREATE ASSEMBLY CLRFunctions FROM 'c:\foos\CLRFunctions.dll';
现在我必须寻找的所有UDF的声明中之前,我删除了他们注册。
我宁愿更新程序集,并让SQL Server开始使用它。
更新:我随机尝试DBCC FREEPROCCACHE
强制执行“重新编译”,但SQL Server仍使用旧代码。
更新:我删除了程序集dll CLRFunctions.dll
,并且SQL Server仍然能够运行代码(没有应该是不可能的代码)。