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

如何在sp_send_dbmail的附件文件名中使用正斜杠/字符?

问题根因

你遇到的问题本质和SQL转义无关,半角正斜杠/本身就是Windows、Linux等绝大多数操作系统的路径分隔符,属于文件名禁止使用的特殊字符。当你把带/的字符串传给sp_send_dbmail作为附件名时,系统会自动将/识别为目录层级的分隔符,截断前面的内容当成目录路径,只保留最后一段作为实际文件名,这就是你最终只得到2021.csv的原因。
同时你之前尝试的写法报错,是因为错误使用了单引号转义规则:只有在动态SQL的字符串内部需要转义单引号时才写两个单引号,普通字符串拼接时直接写N'/'即可,多写的单引号会被SQL解析为字符串结束,后面的/就被识别为除法运算符,自然触发类型不匹配的报错。

解决方案

方案1:替换为合法的分隔符(最稳妥)

推荐使用操作系统允许的分隔符替代半角/,常用的可选符号有:

  • 短横-,生成效果如 SITLAMonthlyEntityReport 9-2021.csv
  • 下划线_,生成效果如 SITLAMonthlyEntityReport 9_2021.csv
  • Unicode全角正斜杠/,视觉上和半角/几乎一致,且不会被识别为路径分隔符,生成效果完全符合你的预期 SITLAMonthlyEntityReport 9/2021.csv
    修改后的代码示例:
SELECT @query_attachment_filename = 
  N'SITLAMonthlyEntityReport'
 +N' '
 +CAST(DATEPART(MONTH, DATEADD(MONTH, -1, GETDATE())) AS NVARCHAR(12))
 +N'/' -- 替换为全角正斜杠,也可换成'-'、'_'等其他合法符号
 +CAST(YEAR(GETDATE()) AS NVARCHAR(4))
 +N'.csv';

方案2:调整日期格式(更通用)

也可以直接把日期改成YYYYMM的数字格式,比如SITLAMonthlyEntityReport 202109.csv,这种格式没有任何特殊字符,跨系统兼容性最好,后期按文件名排序也更方便。
代码示例:

SELECT @query_attachment_filename = 
  N'SITLAMonthlyEntityReport'
 +N' '
 +FORMAT(DATEADD(MONTH, -1, GETDATE()), 'yyyyMM') -- 直接生成202109格式的上月年月
 +N'.csv';

注意:半角/无论怎么转义都无法出现在最终的文件名中,操作系统的文件名规则限制无法通过修改SQL语句绕过。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:18:02