SQL Server 2016 SSIS 有条件地覆盖文本文件
SQL Server 2016 SSIS Conditionally Overwrite Text File
设想以下场景:
1.有N个职位
2. jobs按顺序每天一次向同一个文件写入数据
3.任务设置表示文件是覆盖还是追加
到目前为止我尝试的是在我的 data flow
:
中使用 conditional split
测试一下,案例 1 和案例 2 是:
实际发生的是,条件拆分试图找出将哪些数据行发送到哪里,最终将所有行发送到一侧,将 0 行发送到另一侧,双方最终都打开文件(我认为),因此错误:
我知道我在这里滥用了 conditional split
,但是来吧,外面是 2017 年, 必须 是一种无需诉诸 脚本任务 清除文件?
您的问题 - 您滥用了 条件拆分;它旨在操纵数据流中的数据行,而您正试图管理控制流。说到 SSIS,它事先并不知道您将只使用 Flat File Destinations 之一;它试图初始化两者。通过这样做,SSIS 会尝试从两个目标打开同一个文件,但会因错误而失败。
您可以按照 SSIS 方式处理任务 - 使用任务管理控制流。在您的情况下,应该附加或覆盖目标文件。但是被覆盖可以看成是被零行覆盖,然后被追加。幸运的是,SSIS 覆盖了一个文件事件,没有来自数据流的记录。
因此,在应该始终附加数据的数据流之前,您创建了另一个数据流,该数据流始终接收零行数据(集合中的列可以是任意的)并且 Flat File Destination 覆盖文件。然后使用具有优先约束的控制流的条件执行来执行这个"File Cleanup DataFlow Task"。您可能还需要在此 "File Cleanup DataFlow Task".
上设置 DelayValidation=true
设想以下场景: 1.有N个职位 2. jobs按顺序每天一次向同一个文件写入数据 3.任务设置表示文件是覆盖还是追加
到目前为止我尝试的是在我的 data flow
:
conditional split
测试一下,案例 1 和案例 2 是:
实际发生的是,条件拆分试图找出将哪些数据行发送到哪里,最终将所有行发送到一侧,将 0 行发送到另一侧,双方最终都打开文件(我认为),因此错误:
我知道我在这里滥用了 conditional split
,但是来吧,外面是 2017 年, 必须 是一种无需诉诸 脚本任务 清除文件?
您的问题 - 您滥用了 条件拆分;它旨在操纵数据流中的数据行,而您正试图管理控制流。说到 SSIS,它事先并不知道您将只使用 Flat File Destinations 之一;它试图初始化两者。通过这样做,SSIS 会尝试从两个目标打开同一个文件,但会因错误而失败。
您可以按照 SSIS 方式处理任务 - 使用任务管理控制流。在您的情况下,应该附加或覆盖目标文件。但是被覆盖可以看成是被零行覆盖,然后被追加。幸运的是,SSIS 覆盖了一个文件事件,没有来自数据流的记录。
因此,在应该始终附加数据的数据流之前,您创建了另一个数据流,该数据流始终接收零行数据(集合中的列可以是任意的)并且 Flat File Destination 覆盖文件。然后使用具有优先约束的控制流的条件执行来执行这个"File Cleanup DataFlow Task"。您可能还需要在此 "File Cleanup DataFlow Task".
DelayValidation=true