我需要检查在Visual Studio 2017中运行的foreach循环容器任务的迭代编号。如何实现此目标?
答案 0 :(得分:5)
SSIS 2012+中可用的任务
在Foreach循环容器中,there is no properties that contains the iteration number。您可以通过创建初始值为0
等于Int的SSIS变量来实现。示例@[User::Counter]
在Foreach循环容器内,添加具有以下表达式的Expression Task
:
@[User::Counter] = @[User::Counter] + 1
有用的链接
您可以使用脚本任务来完成相同的过程,方法是创建计数器变量,在脚本任务中将其选择为ReadWrite变量,然后在脚本内部向主函数中添加类似的行:
Dts.Variables["User::Counter"].Value = Convert.ToInt32(Dts.Variables["User::Counter"].Value) + 1;
参考
有多种显示数据的方式。一种是使用脚本任务。指定您的@[User::Counter]
变量位于ReadOnly集合中,然后将该值发送到运行日志中
public void Main()
{
bool fireAgain = false;
string message = "{0}::{1} : {2}";
foreach (var item in Dts.Variables)
{
Dts.Events.FireInformation(0, "SCR Echo Back", string.Format(message, item.Namespace, item.Name, item.Value), string.Empty, 0, ref fireAgain);
}
Dts.TaskResult = (int)ScriptResults.Success;
}
另一种方法是通过表达式在Foreach循环内设置Task的Name
属性。右键单击循环中的任务,然后选择属性。在“属性”部分中找到[+]Expressions
集合,然后单击右侧的椭圆...
,然后在新窗口中,选择左侧的“名称”,并将右侧的表达式设置为
"My Task " + RIGHT("000" + (DT_WSTR,3) @[User::Counter], 3)
这将两个字符串“ My Task”连接起来,并将Counter变量转换为字符串,并用零左键填充它,因此它始终是3位数