可能你已经找到了解决方案。我希望这能帮助到正在寻找此问题解决方案的人。
在SSIS中没有内置的数据流任务设置来完成此操作。您可以在数据流任务中使用Row Count
转换,结合控制流中的File System Task
来实现此操作。
以下是如何完成此操作的逐步过程。在本示例中,我使用名为Country_State.csv
的csv文件作为源文件,其中包含国家和州。
场景:
该示例包将读取文件,然后写入名为Destination.txt
的文本文件。在此场景中,如果没有错误,则会创建错误文件Error.txt
,但稍后会将其删除。在这里,我将文件存储在路径c:\temp\
中。
逐步流程:
在连接管理器部分,创建三个平面文件连接,分别为“源”、“目标”和“错误”。参考截图#1。
“源”连接应指向csv文件路径c:\ temp \ Country_State.csv。有关此文件的内容,请参阅截图#2。
“目标”连接应指向名为c:\ temp \ Destination.txt的文本文件。
“错误”连接应指向名为c:\ temp \ Error.txt的文本文件。
创建一个数据类型为Int32的变量,命名为ErrorCount。
在控制流选项卡上,放置一个数据流任务,然后放置一个文件系统任务。
将数据流任务连接到文件系统任务。
右键单击数据流任务和文件系统任务之间的连接器。
在Precedence Constraint Editor上,将Evaluation operation更改为Expression,并将值@ErrorCount == 0粘贴到Expression文本框中。
您的控制流应如截图#3所示。
在数据流任务内部的数据流选项卡上,拖放Flat File Source并配置其使用Source连接管理器。
放置Flat File Destination并配置其使用Destination连接管理器。
将Flat File Source的绿色输出箭头连接到Flat File Destination。
在数据流选项卡上放置RowCount转换,并将其配置为使用变量User:ErrorCount。
将Flat File Source的红色输出箭头连接到RowCount转换。
放置Flat File Destination并配置其使用Error连接管理器。
使用Error连接将Row Count转换的输出连接到Flat File Destination。
您的数据流任务应如截图#4所示。
在控制流选项卡上,双击文件系统任务。
在文件系统任务编辑器中,将操作设置为Delete file,并将SourceConnection设置为Error。参见截图#5。
包执行前文件夹路径C:\ temp的内容如截图#6所示。
数据流选项卡执行如截图#7所示。
控制流执行如截图#8所示。
包执行后文件夹路径C:\ temp的内容如截图#9所示。
为了证明这实际上起作用,我更改了“源”连接管理器上的第二列为整数(尽管州名是字符串),以便数据流任务重定向到“错误”输出。
场景2数据流选项卡执行如截图#10所示。
场景2控制流执行如截图#11所示。请注意,文件系统任务未执行,因为错误文件不为空。
场景2包执行后文件夹路径C:\ temp的内容如截图#12所示。请注意,即使没有成功的行,Destination.txt文件也存在。这是因为该示例仅在错误文件为空时删除错误文件。
类似的逻辑可以用来删除空目标文件。
希望这有所帮助。
截图 #1:
![1](https://istack.dev59.com/Fu1p8.webp)
截图 #2:
![2](https://istack.dev59.com/q2mXj.webp)
截图 #3:
![3](https://istack.dev59.com/ejIev.webp)
截图 #4:
![4](https://istack.dev59.com/CU43w.webp)
截图 #5:
![5](https://istack.dev59.com/f4APf.webp)
截图 #6:
![6](https://istack.dev59.com/5UAHf.webp)
截图 #7:
![7](https://istack.dev59.com/PbhmX.webp)
截图 #8:
![8](https://istack.dev59.com/Awbkd.webp)
截图 #9:
![9](https://istack.dev59.com/qhjCy.webp)
截图 #10:
![10](https://istack.dev59.com/xQQhL.webp)
截图 #11:
![11](https://istack.dev59.com/WV4kw.webp)
截图 #12:
![12](https://istack.dev59.com/HXGHa.webp)