在SSIS中显示foreach循环迭代次数

sta*_*ark 4 sql-server ssis etl foreach-loop-container ssis-2017

我需要检查我在Visual Studio 2017中运行的foreach循环容器任务的迭代次数.我怎么能实现这一点?

Had*_*adi 5

(1)使用表达式任务计算迭代次数

SSIS 2012+中提供的任务

在Foreach循环容器中,没有包含迭代编号的属性.您可以通过创建Int类型的SSIS变量来实现此目的,初始值相等0.例@[User::Counter]

在Foreach循环容器内,Expression Task使用以下表达式添加:

@[User::Counter] = @[User::Counter] + 1
Run Code Online (Sandbox Code Playgroud)

有用的网址

(2)使用脚本任务计算迭代次数

您可以使用脚本任务实现相同的过程,通过创建计数器变量,在脚本任务中选择它作为ReadWrite变量,并在脚本内部向主函数添加类似的行:

Dts.Variables["User::Counter"].Value = Convert.ToInt32(Dts.Variables["User::Counter"].Value) + 1;
Run Code Online (Sandbox Code Playgroud)

参考

显示数据

有不同的显示数据的方式.一种是使用脚本任务.指定您的@[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;
    }
Run Code Online (Sandbox Code Playgroud)

另一种方法是Name通过表达式在Foreach循环中设置任务的属性.右键单击循环中的任务,然后选择"属性".[+]Expressions在"属性"部分中找到该集合,然后单击右侧椭圆...,在新窗口中,选择左侧的"名称"并将右侧表达式设置为

"My Task " + RIGHT("000" + (DT_WSTR,3) @[User::Counter], 3)
Run Code Online (Sandbox Code Playgroud)

这将两个字符串"我的任务"连接在一起,并将Counter变量转换为字符串,并将其填充为零,因此它总是一个3位数字