在SSIS中导入之前删除文本文件的内容

时间:2017-09-15 14:22:49

标签: sql sql-server ssis sql-server-data-tools

我有一个SSIS包,它循环通过一个文件位置将数据从多个平面文件导入一个SQL Server表目的地。无法处理文件中的某些数据行,因此任何失败,我已发送到单独的平面文件目标。

我的问题是,如果我检查Overwrite data in the file框,我只会收到数千行中的3行数据。如果我取消选中该框,那么我会得到一张更真实的图片,上面有一百多条记录因某种原因无法处理。我不能这样离开,因为每次运行包时,上次运行的内容仍然存在。

我的问题是为什么会发生这种情况,我该如何解决?

Data Flow Task位于For Each Loop容器中,因此我怀疑每次循环运行时它都会覆盖发送到失败行平面文件的所有数据。但是,循环结束时出现的数据来自循环获得的第一个文件。

我可以编写一些SQL脚本以防止这种情况发生吗?

1 个答案:

答案 0 :(得分:1)

在每次运行时,在for循环之前,删除文件(如果存在)并创建一个新文件,然后不要覆盖。

如果要保留以前运行的历史记录,可以使用运行ID或日期时间值为文件添加后缀。如果你这样做,你也可以运行清理,只保留一些特定数字或日期范围内的文件。