You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2014执行sp_db_sendmail报错:.NET Framework加载程序集失败

解决SQL Server 2014调用邮件存储过程时的程序集加载错误

我之前帮不少同行解决过这个问题,你的错误提示非常典型——核心原因就是负责邮件功能的.NET程序集权限不够,或者数据库的信任属性没开启。咱们一步步来排查修复:

第一步:先搞清楚出问题的程序集是什么

先执行这条SQL,找到ID为65549的程序集的详细信息,重点看它的权限设置:

USE msdb; -- 因为系统自带的sp_send_dbmail默认在msdb库,如果你是自定义存储过程在其他库,替换成对应库名
SELECT name, permission_set_desc 
FROM sys.assemblies 
WHERE assembly_id = 65549;

如果查询结果里的permission_set_desc显示是SAFE,那直接就是权限不足——发送邮件需要访问外部资源,必须把权限改成EXTERNAL_ACCESS或者UNSAFE。

第二步:开启数据库的TRUSTWORTHY属性(先解决问题,再谈安全)

默认情况下SQL Server的数据库是不允许程序集访问外部资源的,得先打开TRUSTWORTHY开关:

ALTER DATABASE msdb SET TRUSTWORTHY ON; -- 替换成你的目标数据库名

注意:开启这个属性会有一定安全风险,如果你的环境对安全要求极高,后续可以用证书签名程序集的方式来替代,但先把当前问题解决再说。

第三步:修改程序集的权限级别

根据第一步查到的程序集名称,执行这条语句把权限改成EXTERNAL_ACCESS:

USE msdb; -- 对应库名
ALTER ASSEMBLY [你查到的程序集名称]
WITH PERMISSION_SET = EXTERNAL_ACCESS;

如果改完还是报错,再试试UNSAFE级别:

ALTER ASSEMBLY [你查到的程序集名称]
WITH PERMISSION_SET = UNSAFE;

第四步:验证修复效果

重新运行你的存储过程,看看还会不会弹出那个程序集加载错误。如果还是不行,那可能是服务器资源真的不够——检查下SQL Server的内存、CPU使用率,有没有其他占用资源的进程,必要的话在业务低峰期重启SQL Server服务试试。

另外补充一点:如果是你自己写的自定义存储过程调用sp_send_dbmail,还要确保执行这个存储过程的账号有msdb库的DatabaseMailUserRole角色权限,但你的错误提示是程序集加载问题,所以优先处理上面的权限设置。

内容的提问来源于stack exchange,提问作者PJD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:34:14