SSIS平面文件连接器不工作

SSIS平面文件连接器不工作,ssis,Ssis,我在设置的每个平面文件连接器上都出现以下错误。平面文件连接器是在数据流任务中从ADO.NET设置的 数据流任务[Flat File Destination 11[1230]]出错:数字 平面文件目标11的输入列数。输入[平面文件 目标输入]不能为零 数据流任务[SSIS.Pipeline]出错:“平面文件目标11” 验证失败并返回验证状态“VS_IsBreak” 数据流任务[SSIS.Pipeline]出错:一个或多个组件失败 验证 数据流任务出错:任务验证期间出错 我已验证输入中是否有列,如下

我在设置的每个平面文件连接器上都出现以下错误。平面文件连接器是在数据流任务中从ADO.NET设置的

数据流任务[Flat File Destination 11[1230]]出错:数字 平面文件目标11的输入列数。输入[平面文件 目标输入]不能为零

数据流任务[SSIS.Pipeline]出错:“平面文件目标11” 验证失败并返回验证状态“VS_IsBreak”

数据流任务[SSIS.Pipeline]出错:一个或多个组件失败 验证

数据流任务出错:任务验证期间出错

我已验证输入中是否有列,如下所示:

我的眼睛看起来像

元数据看起来很合适

列映射


不要像这样构建数据流。它们需要一段时间来验证(组件一个接一个地得到验证),并且您将获得有限数量的并行运行,因为它们都在相同的数据流中。如果所有这些源都访问同一个DB,您也可能会遇到锁定问题-请参阅

如果您已确认所有平面文件目标都已映射其输入列,并且仍然出现此错误,则可能是SSIS数据流的源/目标映射太多,无法正确处理/验证。您可能想尝试下面的一种设计方案

可管理性与性能 当您处理这么多目的地时,我推荐一种可管理的方法。如果每个源->目标映射的元数据都相同,则可以使用单个数据流执行此ETL

  • 创建一个包含“SourceQuery”和“OutputFileName”列的DB表
  • 在表中为每个源/输出映射添加一行
  • 在控制流中,从表中选择所有行
  • 将结果集设置为完整结果集
  • 将结果存储在对象变量(objResultSet)中
  • 使用带有ADO枚举器的Foreach循环容器读取每一行 从objResultSet
  • 将结果集中的列映射到包变量
  • 使用将SourceQuery变量映射到ADO.NET源查询 表情
  • 将OutputFileName变量映射到平面文件连接 管理器的文件路径
  • 如果你觉得<强>性能比可管理性更重要,并且你想给你的场景添加更多的并行性,那么你可以考虑一些不同的事情。您采取的方法将取决于这些源查询的不同程度,以及您是希望在DB级别还是在SSIS数据流中进行计算。有很多方法可以做到这一点-这里有一些事情要记住

    • 使用多个数据流任务可以实现更多的并行性,并且通常比在单个数据流中使用多个源的性能更好。在数据流中使用多个源的唯一时间是在合并/连接行时(并且连接不能在源查询中完成)
    • 如果所需的所有数据都可以放入单个源查询中,请使用单个源组件和条件拆分转换将行发送到相应的目标
    • 如果您需要在多条路径下使用相同的行,请使用多播转换
    • 您可以使用聚合转换计算总和/计数,但将其推送到源查询会更快

    源文件中所有这些列的格式是否正确?另一个问题可能是,您正在使用SSI,并且希望它能够以任何类似于理智的方式工作。是的,列映射似乎是正确的。日/月/年和计数都是整数,市场是字符串。使用SSIS不是我的选择在我放弃之前的最后一个问题:您的列是否映射到平面文件目标中?在您的控制流中,右键单击此数据流并禁用它。添加新的数据流。将其中一对复制出来并粘贴到新的数据流中。我建议从“按日期按市场划分的第1节监护人”开始,这样做有效吗?事实上,您有这么多的平面文件目的地通过Xs传递,这让我相信SSIS只是在向您返回错误错误。“另一个进程正在使用文件”-我是否正确理解您的评论,其中一些目的地是相同的物理文件?实际问题是我需要进行“映射”选项卡,并在取消之前单击OK,但我认为这是一个更易于管理的解决方案,以供将来参考。标记作为答案。当我查看它们时,我看到它们已经设置好了,但是默认设置没有被应用,因为我取消了对话框。默认值仅在点击“映射”选项卡时应用。另外,将每个“部分”放在单独查询中的主要原因是我不知道如何处理多表结果集。