1

我对SSIS相当陌生。

我有一个非常复杂的 SQL 查询(我不想复制和维护 3 次),其结果是一个包含 2 列的表:emailAddress、formLetterNumber

我想做的是

for each row returned:
    if formLetterNumber == 1
           send form letter #1 to that emailAddress
    if formLetterNumber == 2
           send form letter #2 to that emailAddress
    if formLetterNumber == 3
           send form letter #3 to that emailAddress  

由于各种商业原因,我预计不会超过 3 封套用信函。

我做了什么:

  • 在控制流上,我放置了一个执行 SQL 组件。(到目前为止,一切都很好)
  • 我将它连接到一个 Foreach 组件
  • 在 Foreach 组件中,我在 这里放置了一个发送邮件任务输入图像描述 如果只有一种类型的套用信函,这将有效。这个单一形式的信件包运行没有任何问题。

但现在我想做一个有条件的拆分,所以我可以根据 SQL 返回的 formLetterNumber 将流划分为 3 个不同的发送邮件任务。但是条件拆分在数据流工具箱上,发送邮件任务只在控制流工具箱上,我不知道如何将数据从一个组件移动到另一个组件。查看图片了解我正在尝试做的事情: 在此处输入图片描述, 在此处输入图片描述

我在这个网站和 YouTube 上看过,要么没有解决方案,要么我以错误的方式问我的问题。C# 和脚本是一种选择,但购买其他软件不是。预先感谢您的建议。

4

1 回答 1

3

可以在 SSIS 控制流中使用优先约束。

优先约束支持表达式。如果我们在 SSIS 优先约束中选择表达式,它会计算表达式,如果表达式为真,则运行受约束的可执行文件。

因此,对于您的情况,您需要三个优先约束以及以下行的表达式:

@formLetterNumber == 1

下一个优先约束表达式将是

@formLetterNumber == 2

关于这个主题的好文章:SSIS 优先约束概述

作为最终结果,可以按如下方式组合过程:

  1. 在 Foreach Employee Container 中添加一个空的Sequence Container。
  2. Out of Sequence Container 添加上述三个 Precedence Constraints。
  3. 每个优先约束都以针对特定类型的套用信函的自己的发送电子邮件任务结束。
于 2021-12-28T15:04:46.903 回答