如何在SQL Server存储过程的收件人列表中移除指定邮箱地址
SQL Server 移除存储过程关联报表收件人邮箱操作说明
现有方案说明
你当前编写的硬编码更新语句,在确认p_rpt_daily_alarm对应的当前收件人确实为abc@test.com; 123@test.com; 456@test.com、且执行操作前没有其他人员修改过该条配置的前提下,可以正常运行,执行后会直接将目标邮箱从收件人列表中移除。
通用无硬编码更新方案(推荐)
如果不想硬编码完整收件人列表,避免覆盖其他人员提前更新的收件人配置,可以使用字符串替换的方式实现自动移除指定邮箱,兼容邮箱在列表开头、中间、结尾的不同场景:
步骤1:先执行查询验证,确认替换结果符合预期
SELECT Recipients AS 原收件人列表, REPLACE(REPLACE(Recipients, 'abc@test.com; ', ''), 'abc@test.com', '') AS 替换后收件人列表 FROM [BCCDW].[Config].[StoredProcExecution] WHERE SPName = 'p_rpt_daily_alarm'
步骤2:验证无误后执行更新操作
BEGIN TRANSACTION UPDATE [BCCDW].[Config].[StoredProcExecution] SET Recipients = TRIM(';' FROM REPLACE(REPLACE(Recipients, 'abc@test.com; ', ''), 'abc@test.com', '')) WHERE SPName = 'p_rpt_daily_alarm' -- 执行后先查询确认更新结果 SELECT Recipients FROM [BCCDW].[Config].[StoredProcExecution] WHERE SPName = 'p_rpt_daily_alarm' -- 确认结果正确再提交,错误则执行ROLLBACK -- COMMIT; -- ROLLBACK;
注意事项
- 如果收件人列表的分隔符前后没有空格,可以调整REPLACE的匹配规则,去掉参数里的空格即可
- 生产环境操作前务必做好配置备份,避免误改数据导致报表发错或者漏发
- 操作完成后可以触发一次测试执行,确认收件人配置生效
内容的提问来源于stack exchange,提问作者Amit Joshi
相关产品推荐
相关产品推荐

