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

SQL Server 2016发送带附件邮件突然失效求助

问题排查与解决方案

针对SQL Server 2016环境下sp_send_dbmail无法生成附件的问题,按以下步骤排查修复:

1. 修正@blind_copy_recipients参数格式

你的代码中该参数写法存在错误:

@blind_copy_recipients='N''xyz@xyz.com'

正确格式应为:

@blind_copy_recipients=N'xyz@xyz.com'

多余的单引号和错误的引号嵌套会导致参数解析异常,可能中断附件生成流程。

2. 移除查询中的GO语句

sp_send_dbmail的@Query参数不支持GO批处理分隔符(这是SSMS工具命令,不属于T-SQL语法),修改查询语句为:

SET @SQL ='
USE MYDB
SET NOCOUNT ON 
SELECT x, Code , y , z  
FROM table1  
LEFT JOIN table2 ON table1.a= table2.b'

保留GO会导致查询执行失败,无法生成附件内容。

3. 修正文件名中的非法字符

convert(date,getdate(),103)生成的dd/mm/yyyy格式包含斜杠/,属于文件名非法字符,会导致附件无法创建。改用无分隔符的日期格式:

SET @File = 'xyz' + CONVERT(nvarchar(50), GETDATE(), 112) + '.txt'

格式112对应yyyyMMdd,生成合法文件名(如xyz20240520.txt)。

4. 查看Database Mail后台日志

执行以下查询获取邮件发送的详细日志,排查隐藏错误:

SELECT * FROM msdb.dbo.sysmail_allitems ORDER BY send_request_date DESC;
SELECT * FROM msdb.dbo.sysmail_log ORDER BY log_date DESC;

重点关注sysmail_log中的错误信息,比如文件权限、查询执行失败等。

5. 验证权限与临时目录

  • 确认Database Mail使用的账户(通常为SQL Server代理账户)对MYDB拥有SELECT权限,可正常执行目标查询。
  • 检查该账户是否有权限访问SQL Server临时文件目录(默认路径为C:\Program Files\Microsoft SQL Server\<InstanceID>\MSSQL\Log),附件生成需在此目录创建临时文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:23:28