5

我有一个 CLR 存储过程,它引用在 VS 2008 中创建的使用 Linq 的程序集。让我们将此程序集称为“MyLib”。

我似乎无法将“MyLib”放入我的 SQL 2005 数据库。我执行以下操作:

CREATE ASSEMBLY [MyLib]
    FROM 'C:\MyLib\bin\Release\MyLib.dll'
WITH PERMISSION_SET = UNSAFE
GO

但我得到了错误:

Assembly 'MyLib' references assembly 'system.core, version=3.5.0.0, 
culture=neutral, publickeytoken=b77a5c561934e089.', which is not present 
in the current database. SQL Server attempted to locate and automatically 
load the referenced assembly from the same location where referring assembly 
came from, but that operation has failed (reason: 2(error not found)). Please
load the referenced assembly into the current database and retry your request.

有没有一种更简单的方法可以将所有 .Net 3.5 程序集放入 SQL 2005 CLR,除了我为每个程序写一个“CREATE ASSEMBLY”命令?是否有一些“最佳实践”的方式来做到这一点?

4

2 回答 2

2

看看这个线程。基本上,您必须手动获取要加载的新程序集,而不是从全局程序集缓存中自动加载它们。

(2.0 和 3.5 版本的 CLR 相同)

于 2009-07-27T17:16:43.110 回答
1

SQL Server 2005 随 v2.0.50727 CLR 一起发布——它还没有包含LINQ。

您将无法在 SQL 2005 CLR 程序集中使用 LINQ - 您需要坚持使用原始的 .NET 2.0 程序集。

唯一的机会是在您的部署中包含所有相关的 3.5 系统程序集(即 System.Linq、System.Data.Linq)——它们都基于 .NET 2.0 CLR,所以这可能是可能的——我个人可能不会费心尝试,似乎工作量太大,麻烦太多。

SQL Server 2008 R2 很可能会附带一个新的 CLR(只是我的猜测——目前还没有官方确认或公告,AFAIK)。

马克

于 2009-07-27T17:13:21.057 回答