我假设你的包裹看起来像这样

创建变量
变量的使用有助于将涉猎者与专业人士区分开来。这是正确的,因为您可以在包上放置一个断点来检查变量。检查任务上的表达式不能这样说。
如您所见,我创建了一些变量。
- CurrentID,字符串,从我的 foreach 循环中填充
- 收件人,字符串,从我的 foreach 循环中填充
- FolderInput,字符串,文件将存在的基本文件夹
- ResultSet,对象,填充在执行 SQL 任务中,在 Foreach 循环中分解
- CurrentFile,String,定义文件的完整路径。这是一个表达式
@[User::FolderInput] + "\\Happy " + (DT_WSTR, 3) @[User::CurrentID]+ ".pdf"
随着 Foreach 循环的枚举,CurrentID 和 Recipient 的值会发生变化。由于 CurrentID 更改,我的映射将为每个人更新,因此当发送邮件任务触发时,它会发送正确的文件。
未解决 - 动态文件名和子文件夹。CurrentFile 上的表达式假定该文件将存在并且将始终命名为Happy NNN.pdfNNN 是 CurrentID 值。如果您可以拥有Hap 123.pdf,Joyous 123.pdf等Subfolder\Happy 123.pdf,那么您可能会在脚本任务中完成工作以获取文件名的值。这是一个单独的 SO 问题。
表达你自己
在发送邮件任务上,第三个选项卡显示了此任务的表达式。这是 SSIS 工具包中每个任务上最强大的选项。这里我们将指定收件人是变量@[User::Recipient],我们发送的文件是[@User::CurrentFile]

一,相当重要的事情要注意。如果文件不存在,发送邮件任务将失败。