如何将SQL语句输出写入CSV文件?

时间:2011-06-16 15:28:56

标签: sql sql-server-2008 ssis

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

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

有没有办法写一个平面文件,其中有>重复日志表中有0条记录?

2 个答案:

答案 0 :(得分:1)

这是一个可能的选项,可以让您了解删除没有记录的错误文件。

以下是有关如何执行此操作的分步过程。在这个例子中,我使用了一个名为Country_State.csv的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. 创建名为ErrorCount的数据类型 Int32 的变量。
  6. 在“控制流”标签上,放置Data Flow Task,然后放置File System Task
  7. 将数据流任务连接到文件系统任务。
  8. 右键单击“数据流任务”和“文件系统任务”之间的连接器。
  9. 优先约束编辑器上,将评估操作更改为Expression,并将值@ErrorCount == 0粘贴到表达式 textbox。
  10. 您的控制流程应如屏幕截图# 3
  11. 所示
  12. 在数据流选项卡上的数据流任务内,拖放平面文件源并将其配置为使用Source连接管理器。
  13. 放置一个平面文件目标并将其配置为使用Destination连接管理器。
  14. 绿色输出箭头从平面文件源连接到平面文件目标。
  15. 在数据流标签上放置Row Count转换,并将其配置为使用变量User:ErrorCount
  16. 将平面文件源中的红色输出箭头连接到行计数转换。
  17. 放置一个平面文件目标并将其配置为使用Error连接管理器。
  18. 使用Error连接将行计数的输出连接到平面文件目标。
  19. 您的数据流任务应如屏幕截图# 4
  20. 所示
  21. 在“控制流”选项卡上,双击“文件系统任务”。
  22. 在文件系统任务编辑器中,将操作设置为Delete file,并将 SourceConnection 设置为Error。请参阅屏幕截图# 5
  23. 包执行前文件夹路径C:\temp的内容显示在屏幕截图# 6 中。
  24. 数据流标签执行显示在屏幕截图# 7
  25. 控制流程执行显示在屏幕截图# 8
  26. 包执行后文件夹路径C:\temp的内容显示在屏幕截图# 9 中。
  27. 为了显示这实际上有效,我将Source连接管理器上的第二列更改为整数(即​​使状态名称是字符串),以便数据流任务重定向到Error输出。 / LI>
  28. 场景 2 数据流标签执行显示在屏幕截图# 10 中。
  29. 场景 2 控制流程执行显示在屏幕截图# 11 中。请注意,文件系统任务未执行,因为错误文件不为空。
  30. 在方案 2 包执行后文件夹路径C:\temp的内容显示在屏幕截图# 12 中。请注意,即使没有成功的行,也存在Destination.txt文件。这是因为该示例仅删除Error文件(如果为空)。
  31. 类似的逻辑可用于删除空的目标文件。

    希望有所帮助。

    屏幕截图#1:

    1

    屏幕截图#2:

    2

    屏幕截图#3:

    3

    屏幕截图#4:

    4

    屏幕截图#5:

    5

    屏幕截图#6:

    6

    屏幕截图#7:

    7

    屏幕截图#8:

    8

    屏幕截图#9:

    9

    屏幕截图#10:

    10

    屏幕截图#11:

    11

    屏幕截图#12:

    12

答案 1 :(得分:0)

你可以尝试这个..在执行任务之前输出一个脚本来检查文件大小,然后添加一个“优先约束”......当为真时,然后继续。与

Dim FileInfo As System.IO.FileInfo

你可以获得文件长度,如... FileInfo.Length。