发布SQL Server CLR程序集

时间:2016-05-16 17:35:44

标签: sql-server sql-server-2012 clr

我正在为我的客户开发一个CLR存储过程。涉及两个程序集。 CLR程序集包含“存储过程”和执行某些操作的“引擎”。 (我正在开发两者。)如果有必要,我可以详细介绍这个问题,但我不认为这与问题直接相关。

当我测试我的早期原型时,我让Visual Studio生成在SQL服务器上注册程序集和CLR过程的脚本。它使用以下语法注册程序集...

CREATE ASSEMBLY [Blah.Blah.Engine]
    AUTHORIZATION [dbo]
    FROM 0x4D5A9000030000000....

CREATE ASSEMBLY [Blah.Blah]
    AUTHORIZATION [dbo]
    FROM 0x4D5A90000300.....

然后它创建程序。这很好用。但是,不是将十六进制位作为CREATE ASSEMBLY语句的一部分发送,而是我们要做的是将已编译的.DLL文件复制到磁盘并使用程序集的路径来注册它们,就像这样......

CREATE ASSEMBLY [Blah.Blah.Engine]
    AUTHORIZATION [dbo]
    FROM 'C:\MyFolder\Blah.Blah.Engine.dll'

然而,当我这样做时,我收到以下错误:

  

Msg 10301,Level 16,State 1,Line 26 Assembly'Brah.Blah.Engine'   引用程序集'system.data.datasetextensions,version = 4.0.0.0,   culture = neutral,publickeytoken = b77a5c561934e089。',但不是   存在于当前数据库中。 SQL Server试图找到和   从同一位置自动加载引用的程序集   引用程序集来自哪里,但该操作失败了   (原因:2(系统找不到指定的文件。))。请加载   引用的程序集进入当前数据库并重试您的   请求。

是的,我的引擎正在引用system.data.datasetextensions。但是,如果我使用第一种语法,我不会得到这个错误。我非常希望不必使用WITH PERMISSION_SET = UNSAFE短语,并且必须手动将所有引用的程序集复制到服务器上的“MyFolder”中。这似乎不是正确的方式。但是如果正确地发送这些位,那么当我第二种方式执行时它为什么不起作用?

0 个答案:

没有答案