日期:2014-05-17  浏览次数:20596 次

发布64位SQL CLR存储过程出错
操作系统: Windows Server 2008 R2 (64-bit)
数据库: Microsoft SQL Server Developer Edition (64-bit)
开发工具: Microsoft Visual Studio 2010
创建了 SQL CLR 的 VB.Net 项目,创建了空白的存储过程,编译成功,自动发布失败。
自己用SQL语句手工发布,语句
CREATE ASSEMBLY [abc]
    AUTHORIZATION [dbo]
FROM 'C:\...\abc.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;

出错信息(翻译)为:
因为它内置的组件不支持公共语言运行库的版本,CREATE ASSEMBLY组件'abc'失败。

用 "Any PC" 和 "x64" 两种方式编译的 dll 都发布失败。
如何解决?
SQL?CLR

------解决方案--------------------
如果是存在提示没有权限的话。
在创建程序集前,执行以下语句:
 GRANT EXTERNAL ACCESS ASSEMBLY TO loginame
 ALTER DATABASE dbname SET TRUSTWORTHY ON
 (dbname 为准备创建的程序集所在的数据库,loginame 为该数据库的拥有者)
查询拥有者用户名
select suser_sname(owner_sid) from sys.databases where [name]='dbname'   
------解决方案--------------------
另外说一下SQL SERVER 2008 R2是不支持.NET 4.0的assembly ,所以你发布的时候.NET版本要选择3.5或者之前的。