Sql server 始终触发SSIS故障场景
我对SSIS包中的流有问题。 为了提高性能,我通常使用相同的逻辑将数据从MS Access文件导入SQL Server数据库:Sql server 始终触发SSIS故障场景,sql-server,ssis,package,integration,Sql Server,Ssis,Package,Integration,我对SSIS包中的流有问题。 为了提高性能,我通常使用相同的逻辑将数据从MS Access文件导入SQL Server数据库: 第一个任务-尝试大容量插入数据(表或视图-快速加载) 如果出现故障(例如,违反约束),则整个记录组将传递给下一个任务-正常插入(表视图) 所有问题记录都会传递到下一步,以便记录到平面文件(txt)中 我面临的问题是,即使第一次插入顺利进行,我仍然会到达失败流,并且始终会创建一个空的错误日志文件。 根据我的理解,只有在以前出现问题的情况下,流程才会达到这一点 为了更好
- 第一个任务-尝试大容量插入数据(表或视图-快速加载)
- 如果出现故障(例如,违反约束),则整个记录组将传递给下一个任务-正常插入(表视图)
- 所有问题记录都会传递到下一步,以便记录到平面文件(txt)中
我认为您可能在某种程度上混淆了数据流和控制流 将创建StockExchange错误日志,因为它可能会从数据流接收记录 解决办法可以是: 1) 创建临时错误日志文件以临时保留失败的行,如果在临时位置成功,则为零行 2) 在“StockExchange-Get Error Desc”组件之后,添加一个rowcount组件并分配给变量,例如iErrorCount 3) 在控制流中,在数据流之后添加两个优先约束。一个是@iErrorCount>0,另一个是@iErrorCount==0。如果为零,则添加一个文件系统任务以删除临时日志文件(使其具有零行)
4) 对于@ErrorCount>0路径,您可以添加一个文件系统任务,以使用有效名称将临时日志文件复制到所需位置。并添加文件系统任务以删除临时日志文件 谢谢你的评论。这将是一个有点复杂和大量冗余的手工工作-因为我对许多表重复了相同的模式,我需要有尽可能多的行计数变量,并在那里添加如此多的额外任务。按照我已经想到的方法,我将只添加一个常规循环任务,它将循环所有日志文件并删除那些空的。但我仍然不清楚逻辑,为什么在失败的情况下我仍然继续,但似乎这就是它的工作原理。