Answers:
您只能添加对已在Sql Server中注册的那些程序集的引用。如果未注册,它们将不会显示在“添加引用”对话框中。
注册DLL需要执行许多步骤,首先需要重新配置数据库:
ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;
完成此操作后,将启用Sql Server CLR。接下来,您需要注册您的程序集:
CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE
如果最后一个脚本正确运行,则程序集现在已注册,并将出现在“添加引用”对话框中。
但是,您需要考虑的是Sql Server CLR配置的应用程序安全性:
SAFE
只有在特殊情况下才应使用EXTERNAL_ACCESS
或UNSAFE
。Assembly.Load()
有目的地限制动态加载程序集。UNSAFE
。context connection = true;
)在连接的用户的上下文中运行,因此您需要确保了解该库对数据的访问权限。我假设您正在询问有关从Visual Studio安装SQL CLR程序集的替代方法。
在Visual Studio中不需要代码。
在MSDN上部署CLR数据库对象详细说明了这些选项,包括SQL语句和部署脚本。
我使用了一个非常大的第三方DLL,该DLL会占用一个网页并将其转换为PDF。
PDF将保存在文件共享中,并且数据库的位置和类型也会更新。
这是一个三步过程:
创建一个使用第三方DLL来创建PDF并接受URL和FilePath作为参数的控制台应用程序,并返回PDF的大小和页数。
创建一个CLR存储过程,然后在服务器上调用控制台应用程序
我将所有这些包装到单个存储过程中,该存储过程调用CLR应用程序以创建PDF,然后将有关它的元数据写入数据库。
我意识到这并不完美,绝不应该在触发器内做任何疯狂的事!
我在这里只为其他人提到在其CLR中使用3rd Party DLL时遇到问题。
我希望通过分离cmd.exe控制台来运行3rd Party DLL,而不是运行过程中的所有内容(如果崩溃),不会对SQL Server产生太大的负面影响。那就是我所希望的。
请评论这是否真的很糟糕,为什么。