不创建文件时,源有0行

问题描述 投票:6回答:2

我有下面的数据流区域内。我遇到的问题是,即使结果为0,它仍然是创建该文件。

任何人都可以看到我在做什么错在这里?

enter image description here

enter image description here

enter image description here

sql-server ssis etl flat-file flatfiledestination
2个回答
2
投票

这是相当多预期和已知的令人讨厌的行为。 SSIS将创建一个空平面文件,即使未选中:“在第一个数据行的列名”。

该解决方法是:

  • 如果@RowCountWriteOff = 0只是一个数据流执行后由文件系统任务删除这些文件。
  • 作为替代,如果在源行的预期数是0不启动的数据流:enter image description here

更新2019年2月11日:

问题我是,我有这些导出为CSV格式的命令在数据流中的13,他们是昂贵查询

  • 然后双击查询源提前检查行数将更加昂贵,也许更好的重用变量@RowCountWriteOff的值。
  • 最初的设计有13个数据流,加入13个约束和13个的文件系统任务的主控制流程会使封装更加复杂,难以维持
  • 因此,建议是使用一个OnPostExecute事件处理程序,所以清理逻辑被隔离于一些特定的数据流:

enter image description here


2
投票

Update 1 - Adding more details based on OP comments

基于您的评论我会认为你要循环使用SQL命令许多表,检查表中包含行,如果是这样,那么你应该行导出到文本文件,否则你应该忽略表。我会提到,你需要做到这一点,并提供一个包含每个步骤的详细信息链接的步骤。

  1. 首先,你应该创建一个Foreach Loop container to loop over tables
  2. 你应该用计数命​​令Execute SQL TaskSELECT COunt(*) FROM ....)添加store the Resultset inside a variable
  3. 添加一个数据流任务从OLEDB来源,数据导入到平面文件目标。
  4. 之后,你应该add a precedence constraint with expression,在数据流任务,类似于@[User::RowCount] > 0表达

此外,这是好事,我检查提供,因为它们包含了很多有用的信息,并一步一步指南的链接。


Initial Answer

从创建空的纯文本文件防止SSIS的是,你可以在网上找到很多参考的,有很多解决方法,并提出了许多方法可以解决这个问题的一个常见问题:

  1. 尝试设置Data Flow Task Delay Validation属性True
  2. 创建包内的另一个Data Flow Task,这将只用在源数行,如果是大于0则优先约束应该导致其他Data Flow Task
  3. 添加File System Task其删除输出文件,如果行数是Data Flow Tasko后,你应该设置优先约束的表达,以确保。

References and helpful links

© www.soinside.com 2019 - 2024. All rights reserved.