Sql server 始终触发SSIS故障场景

Sql server 始终触发SSIS故障场景,sql-server,ssis,package,integration,Sql Server,Ssis,Package,Integration,我对SSIS包中的流有问题。 为了提高性能,我通常使用相同的逻辑将数据从MS Access文件导入SQL Server数据库: 第一个任务-尝试大容量插入数据(表或视图-快速加载) 如果出现故障(例如,违反约束),则整个记录组将传递给下一个任务-正常插入(表视图) 所有问题记录都会传递到下一步,以便记录到平面文件(txt)中 我面临的问题是,即使第一次插入顺利进行,我仍然会到达失败流,并且始终会创建一个空的错误日志文件。 根据我的理解,只有在以前出现问题的情况下,流程才会达到这一点 为了更好

我对SSIS包中的流有问题。 为了提高性能,我通常使用相同的逻辑将数据从MS Access文件导入SQL Server数据库:

  • 第一个任务-尝试大容量插入数据(表或视图-快速加载)
  • 如果出现故障(例如,违反约束),则整个记录组将传递给下一个任务-正常插入(表视图)
  • 所有问题记录都会传递到下一步,以便记录到平面文件(txt)中
我面临的问题是,即使第一次插入顺利进行,我仍然会到达失败流,并且始终会创建一个空的错误日志文件。 根据我的理解,只有在以前出现问题的情况下,流程才会达到这一点

为了更好地理解,我附加了带有执行结果的图像,并且在末尾有绿色记号

如果您有任何关于解决方法的建议,我们将不胜感激。我需要的是创建错误日志文件-只有在出现任何错误时才需要有关问题的详细信息

谢谢


我认为您可能在某种程度上混淆了数据流和控制流

将创建StockExchange错误日志,因为它可能会从数据流接收记录

解决办法可以是:

1) 创建临时错误日志文件以临时保留失败的行,如果在临时位置成功,则为零行

2) 在“StockExchange-Get Error Desc”组件之后,添加一个rowcount组件并分配给变量,例如iErrorCount

3) 在控制流中,在数据流之后添加两个优先约束。一个是@iErrorCount>0,另一个是@iErrorCount==0。如果为零,则添加一个文件系统任务以删除临时日志文件(使其具有零行)


4) 对于@ErrorCount>0路径,您可以添加一个文件系统任务,以使用有效名称将临时日志文件复制到所需位置。并添加文件系统任务以删除临时日志文件

谢谢你的评论。这将是一个有点复杂和大量冗余的手工工作-因为我对许多表重复了相同的模式,我需要有尽可能多的行计数变量,并在那里添加如此多的额外任务。按照我已经想到的方法,我将只添加一个常规循环任务,它将循环所有日志文件并删除那些空的。但我仍然不清楚逻辑,为什么在失败的情况下我仍然继续,但似乎这就是它的工作原理。