如何写SQL语句输出到CSV文件?(How to write an SQL statement ou

2019-10-30 05:06发布

我们有一个处理一个flatflat,将数据插入数据库的脚本任务,然后记录任何重复(通过存储proccedure)到SQL表,然后将其传递到工作流任务中查找该表和所有的数据写入到一个文件,然后trucates表。

问题是,即使有记录的0个错误,它总是写的日志平面文件。

有没有写一个平面文件,其中有> 0记录重复的记录表的方法吗?

Answer 1:

下面是可能会给你摆脱那些没有记录错误文件的想法可能的选择。

这里是一步一步如何做到这一点的过程。 在这个例子中,我使用了一个名为csv文件Country_State.csv含国家和源文件的状态。

场景

样本包将读取该文件,然后写入名为文本文件Destination.txt 。 在这种情况下,错误文件Error.txt将被创建,但如果没有错误,后来被删除。 在这里,我有存放的路径文件c:\temp\

通过台阶流动步骤:

  1. 在连接管理器部分,创建即三个平面文件的连接目标错误 。 请参阅截图#1。
  2. Source连接应指向CSV文件的路径c:\temp\Country_State.csv 。 请参阅截图#2本文件的内容。
  3. Destination连接应指向一个文本文件,名为c:\temp\Destination.txt
  4. Error的连接应指向一个文本文件,名为c:\temp\Error.txt
  5. 创建一个名为数据Int32类型的变量ErrorCount
  6. 在控制流选项卡,将一个Data Flow Task ,然后将一个File System Task
  7. 连接数据流任务文件系统任务。
  8. 右键点击数据流任务之间的连接器和文件系统任务。
  9. 优先约束编辑器评价操作改变为Expression并粘贴值@ErrorCount == 0Expression文本框。
  10. 控制流看起来应该如图截图#3。
  11. 在数据流选项卡,拖动数据流任务内落平面文件源,并将其配置使用Source连接管理器。
  12. 将一个平面文件目标,并将其配置使用Destination连接管理器。
  13. 从平面文件源的平面文件目标连接绿色输出箭头。
  14. 将一个Row Count的数据流标签转换和配置它使用可变User:ErrorCount
  15. 从平面文件源的行计数转换将红色输出箭头上。
  16. 将一个平面文件目标,并将其配置使用Error的连接管理器。
  17. 连接方式从行输出计数到平面文件目标Error连接。
  18. 您的数据流任务应该看起来像如图截图#4。
  19. 在控制流选项卡,在文件系统任务双击。
  20. 在文件系统任务编辑器,设置操作Delete file ,并设置SourceConnectionError 。 请参阅截图#5。
  21. 文件夹路径的内容C:\temp包执行之前被示出在屏幕截图6#。
  22. 数据流标签执行示于屏幕截图#7。
  23. 控制流执行显示在屏幕截图#8。
  24. 文件夹路径的内容C:\temp包执行后示于屏幕截图#9。
  25. 要真正显示这个工作,我改变了第二列中的上Source连接管理器为整数(尽管状态名称是字符串),这样的数据流任务重定向到Error输出。
  26. 方案2的数据流标签执行示于屏幕截图#10。
  27. 方案2的控制流的执行示于屏幕截图#11。 请注意,不执行文件系统任务,因为出错的文件是不是空的。
  28. 文件夹路径的内容C:\temp方案2包执行后示于屏幕截图#12。 请注意,该文件Destination.txt存在,即使没有成功行。 这是因为,例如仅删除了错误的文件,如果它是空的。

同样的逻辑可以用来删除一个空目标文件。

希望帮助。

截图#1:

屏幕截图2:

屏幕截图3:

屏幕截图4:

截图#5:

屏幕截图6:

截图#7:

屏幕截图8:

截图#9:

屏幕截图10:

屏幕截图11:

屏幕截图12:



Answer 2:

在执行任务之前检查文件的大小,你可以尝试this..put一个脚本,并添加一个“优先约束” ......真时,然后继续。 同

Dim FileInfo As System.IO.FileInfo

您可以获取该文件的长度一样...... FileInfo.Length。



文章来源: How to write an SQL statement output to a CSV file?