SQL Server 2016 SSIS有条件地覆盖文本文件
问题描述:
以下情景: 1.有N个作业 2.作业按顺序每天将数据写入同一文件 3.任务设置指示文件是否应该被覆盖或追加到SQL Server 2016 SSIS有条件地覆盖文本文件
我已经试过迄今为止在使用conditional split
我data flow
:
对其进行测试,案例1 & 2:
实际发生的事情是,有条件拆分试图制定出要发送的数据行,其中,最终将所有行一边,0行其他双方最终打开文件(我认为),因此错误:
,我感到我正在滥用conditional split
这里,但来了一个,这是2017年外,该必须是一个办法做到这一点,而不诉诸脚本任务清理文件?
答
您的问题 - 您错用了条件拆分;它旨在处理数据流中的数据行,并尝试管理控制流。说到SSIS,它不会提前知道您将只使用平面文件目的地中的一个;它试图初始化两者。通过这样做,SSIS尝试从两个目标打开相同的文件,并失败并出现错误。
您可以使用SSIS方式处理任务 - 使用任务管理控制流。在你的情况下,目标文件应该被追加或被覆盖。但被覆盖的内容可以被视为被零线覆盖,然后被追加。幸运的是,SSIS覆盖文件事件,没有记录来自数据流。
因此,在您的数据流应该总是附加数据之前,您将创建另一个始终接收零数据行的数据流(该列中的列可以是任意的),并覆盖文件平面文件目标。然后使用具有优先约束的控制流的条件执行来执行此“文件清理DataFlow任务”。您可能还需要在此“文件清理DataFlow任务”上设置DelayValidation=true
。
感谢您的回答。我已经通过参数化的“删除文件”任务将逻辑移动到了控制流程中。 – Tsar