如何在SSIS包中添加条件,仅当附件数量≥2时才触发邮件发送
SSIS 按附件数量控制邮件发送实现方案
你可以通过以下两种低成本的方案实现需求,不需要大幅调整现有包结构:
方案一:直接通过现有变量表达式判断(无需修改代码,新手推荐)
你当前存储附件的User::FileNamesList变量使用|作为分隔符,直接通过计算分隔符数量即可得到附件总数,只需调整任务连接逻辑:
- 选中连接Foreach循环容器与发送邮件任务的绿色优先级约束箭头,右键选择「编辑」
- 在弹出的编辑器中,「求值运算」项选择表达式
- 表达式输入框填写以下内容:
@[User::FileNamesList] != "" && (LEN(@[User::FileNamesList]) - LEN(REPLACE(@[User::FileNamesList], "|", "")) + 1) >= 2
表达式逻辑说明:计算
|的数量后加1即为附件总数,同时兼容变量为空的边界场景
- 点击「测试表达式」确认语法有效后保存即可。
方案二:新增计数变量控制(逻辑更清晰,便于后续扩展)
如果后续需要对附件数量做更多逻辑判断,可以新增专用计数变量实现:
- 在SSIS变量面板新建
Int32类型变量User::AttachmentCount,默认值设为0 - 修改现有脚本任务,追加附件时同步更新计数,修改后的代码如下:
if (Dts.Variables["User::FileNamesList"].Value.ToString() == "") { Dts.Variables["User::FileNamesList"].Value = Dts.Variables["User::InputPath"].Value.ToString() + Dts.Variables["User::Year"].Value.ToString() +"\\" + Dts.Variables["User::FileName"].Value.ToString(); Dts.Variables["User::AttachmentCount"].Value = 1; } else { Dts.Variables["User::FileNamesList"].Value = Dts.Variables["User::FileNamesList"].Value.ToString() + "|" + Dts.Variables["User::InputPath"].Value.ToString() + Dts.Variables["User::Year"].Value.ToString() + "\\" + Dts.Variables["User::FileName"].Value.ToString(); Dts.Variables["User::AttachmentCount"].Value = (int)Dts.Variables["User::AttachmentCount"].Value + 1; }
注意:需要在脚本任务的「ReadWriteVariables」配置项中添加
User::AttachmentCount,否则脚本无法读写该变量
- 编辑Foreach循环与发送邮件任务的优先级约束,求值运算选择表达式,表达式填写:
@[User::AttachmentCount] >= 2
现有包结构参考:
内容的提问来源于stack exchange,提问作者Saurabh Kulkarni
相关产品推荐
相关产品推荐

