sql-server – 如何在不从SQL Server中删除程序集的情况下更新CLR程序集

前端之家收集整理的这篇文章主要介绍了sql-server – 如何在不从SQL Server中删除程序集的情况下更新CLR程序集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在不必删除并在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仍然能够运行代码(没有代码应该是不可能的).

解决方法

我想你正在寻找改装装配.来自BOL:

If the FROM clause is specified,ALTER ASSEMBLY updates the assembly
with respect to the latest copies of the modules provided. Because
there might be CLR functions,stored procedures,triggers,data types,
and user-defined aggregate functions in the instance of sql Server
that are already defined against the assembly,the ALTER ASSEMBLY
statement rebinds them to the latest implementation of the assembly.
To accomplish this rebinding,the methods that map to CLR functions,
stored procedures,and triggers must still exist in the modified
assembly with the same signatures. The classes that implement CLR
user-defined types and user-defined aggregate functions must still
satisfy the requirements for being a user-defined type or aggregate.

同一页面上的一个例子似乎就是这样做的:

ALTER ASSEMBLY ComplexNumber 
FROM 'C:\Program Files\Microsoft sql Server\90\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll'
原文链接:https://www.f2er.com/mssql/81336.html

猜你在找的MsSQL相关文章