日期:2014-05-18  浏览次数:20397 次

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