我在一个序列容器中有超过 40 个独立的数据流任务。
有没有办法将序列容器内每个数据流任务中传输到目标的行数记录到平面文件中?
我试过这个方法:
- 使用 rowcount 任务将 rowcount 值存储到变量中。
- 执行目标表任务。
- 在数据流任务之后执行脚本任务将行计数变量写入平面文件。
此方法有效,但我必须继续为该容器内的每个数据流任务添加脚本任务。
有没有办法让这个脚本在每个数据流任务完成后自动执行,写入每个数据流任务传输的行数,自定义文本说“xyz 数据流任务传输 xxxx 行”?
如果您不想一次又一次地添加脚本任务,我建议您创建一个自定义数据流组件。
这将是一次性的工作,但它可以在您可能拥有的各种 SSIS 项目中一次又一次地重复使用。
每个数据流都需要一个主包、一个“包处理程序包”和一个子包。
首先,在您的主包中,调用“包处理程序包”的次数与您拥有数据流的次数一样多。对于每一个,设置一个具有包文件路径的作用域变量。
在“包处理程序包”中,调用表示数据流的子包(使用包含文件路径的父包变量),并在执行包任务成功时调用脚本,该脚本将写下保存数字的变量文件(或表,或任何你想要的)中的行数。
在每个子包中,只需将行计数转换添加到您的包并将值写入父包变量。
所以包的顺序是这样的:
MasterPackage.dtsx
| |
| |
PackageHandler.dtsx PackageHandler.dtsx
| |
| |
ChildPackage_1.dtsx ChildPackage_2.dtsx
注意:你的子包里会有一个错误告诉你父包变量在这个包中不存在,没关系。它将在运行时工作。
我们使用http://pragmaticworks.com/Products/BI-xPress - 它获取包并插入可配置的审计框架。确实有点贵,但评估可用的东西是一个很好的做法。