ForEachloop SSIS

时间:2014-07-11 21:35:08

标签: ssis sql-server-data-tools msbi

任务:循环通过这些excel文件并将数据插入到SQL表中,但在此过程中我收到错误,我不知道它出错了什么。

我的理解是SSIS没有以随机顺序循环文件,但是我收到一条关于CAN NOT ACQUIRE CONNECTION FROM CONNECTIONMANAGER的错误。 Excel Source验证失败并返回错误代码..我确实将64bitruntime设置为False。这发生在Windows 7操作系统上的VS 2008 / SQL Server 2008 R2上。最初,我能够在Windows XP-VS2008 / SQL Server 2008 R2上成功运行整个过程。

问题:如果文件夹中有70个奇数文件,我怎么知道下一个文件系统要迭代?我得到一个错误,我不确定SSIS正在处理哪个文件。但是,我确实看到文件被执行,数据在SQL中。 让我知道如何找到SSIS当前正在工作的文件或下一个将要工作的文件。

2 个答案:

答案 0 :(得分:0)

在执行Excel处理之前,立即在ForEach容器中添加脚本任务。在脚本任务中,添加您在ForEach循环中配置的变量,以将文件名保存到只读变量。在脚本本身中,调用FireInformation事件,该事件将向SSIS中的进度日志添加信息性消息。在FireInformation调用中,将filename变量的值作为消息参数传递。

这将让您看到正在处理的每个文件,以及失败时正在处理的文件。

FireInformation帮助:http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.idtscomponentevents.fireinformation.aspx

答案 1 :(得分:0)

您可以添加脚本任务并记录foreach循环中使用的变量。 enter image description here

在脚本任务编辑器中将变量添加为readonly变量,然后在main方法(C#)中添加如下内容:

public void Main()
{
    bool fireAgain = true;

Dts.Events.FireInformation(0, "Logging FELC variable", "File: " + Dts.Variables["User::FilePath"].Value.ToString(), string.Empty, 0, ref fireAgain);