当前位置: 代码迷 >> Sql Server >> create assembly 报错解决方法
  详细解决方案

create assembly 报错解决方法

热度:481   发布时间:2016-04-27 14:39:04.0
create assembly 报错
我是按照这里的代码操作的
http://blog.csdn.net/xman_78tom/article/details/5912164

数据库是2005,dll已经编译好了,存放的路径也是对的
可是在执行
SQL code
create assembly AutoTran authorization dbo from 'd:/clrAutoTran.dll'with permission_set= external_access;

的时候报错

消息 6502,级别 16,状态 7,第 1 行
CREATE ASSEMBLY 失败,因为它无法读取物理文件'd:/clrAutoTran.dll': 50(不支持该请求。)。


请问是什么情况?

------解决方案--------------------
d:/clrAutoTran.dll这个dll存在吗?
------解决方案--------------------
SQL code
DECLARE @SamplesPath nvarchar(1024)SELECT @SamplesPath = REPLACE(physical_name,     'Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\master.mdf',     'Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\') FROM master.sys.database_files WHERE name = 'master';CREATE ASSEMBLY HelloWorld FROM @SamplesPath + 'HelloWorld\CS\HelloWorld\bin\debug\HelloWorld.dll'WITH PERMISSION_SET = SAFE;
------解决方案--------------------
这个路径的杠杠是不是该反过来打
d:/clrAutoTran.dll
-->
d:\clrAutoTran.dll

这样看看
------解决方案--------------------
参考:

需要 CREATE ASSEMBLY 权限。

如果指定 PERMISSION_SET = EXTERNAL_ACCESS,则 SQL Server 登录必须具有对服务器的 EXTERNAL ACCESS ASSEMBLY 权限。如果指定 PERMISSION_SET = UNSAFE,则需要 sysadmin 固定服务器角色的成员身份。

如果程序集已经存在于数据库中,则用户必须是将上载的程序集所引用的所有程序集的所有者。若要使用文件路径上载程序集,则当前用户必须是经过 Windows 身份验证的登录名或 sysadmin 固定服务器角色的成员。执行 CREATE ASSEMBLY 的用户的 Windows 登录名必须对此语句中加载的共享和文件具有读取权限。

http://msdn.microsoft.com/zh-cn/library/ms189524.aspx
  相关解决方案