在 SSIS 中显示 foreach 循环迭代次数
Display foreach loop iteration number in SSIS
我需要检查我在 Visual Studio 2017 年 运行 的 foreach 循环容器任务的迭代次数。我怎样才能做到这一点?
(1) 使用表达式任务计算迭代次数
SSIS 2012 中可用的任务+
在 Foreach 循环容器中,there is no properties that contains the iteration number。您可以通过创建 Int 类型的 SSIS 变量来实现这一点,其初始值等于 0
。示例 @[User::Counter]
在 Foreach 循环容器内,使用以下表达式添加 Expression Task
:
@[User::Counter] = @[User::Counter] + 1
有用的链接
(2) 使用脚本任务计算迭代次数
您可以使用脚本任务实现相同的过程,方法是创建计数器变量,select 它作为脚本任务中的 ReadWrite 变量,并在脚本中将类似的行添加到主函数中:
Dts.Variables["User::Counter"].Value = Convert.ToInt32(Dts.Variables["User::Counter"].Value) + 1;
参考资料
- Increment a variable within a Foreach Loop and use it-SSIS
- Use SSIS Variables and Parameters in a Script Task
显示数据
显示数据的方式有多种。一种是使用脚本任务。指定您的 @[User::Counter]
变量在 ReadOnly 集合中,然后将值发送到 运行 log
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 循环中设置任务的 Name
属性。右键单击循环中的任务和 select 属性。在“属性”部分找到 [+]Expressions
集合,然后单击右侧的省略号 ...
,然后在左侧的新 window、select 名称中设置右侧副词是
"My Task " + RIGHT("000" + (DT_WSTR,3) @[User::Counter], 3)
这将连接两个字符串 "My Task" 并将 Counter 变量转换为字符串并用零填充它,因此它始终是一个 3 位数字
我需要检查我在 Visual Studio 2017 年 运行 的 foreach 循环容器任务的迭代次数。我怎样才能做到这一点?
(1) 使用表达式任务计算迭代次数
SSIS 2012 中可用的任务+
在 Foreach 循环容器中,there is no properties that contains the iteration number。您可以通过创建 Int 类型的 SSIS 变量来实现这一点,其初始值等于 0
。示例 @[User::Counter]
在 Foreach 循环容器内,使用以下表达式添加 Expression Task
:
@[User::Counter] = @[User::Counter] + 1
有用的链接
(2) 使用脚本任务计算迭代次数
您可以使用脚本任务实现相同的过程,方法是创建计数器变量,select 它作为脚本任务中的 ReadWrite 变量,并在脚本中将类似的行添加到主函数中:
Dts.Variables["User::Counter"].Value = Convert.ToInt32(Dts.Variables["User::Counter"].Value) + 1;
参考资料
- Increment a variable within a Foreach Loop and use it-SSIS
- Use SSIS Variables and Parameters in a Script Task
显示数据
显示数据的方式有多种。一种是使用脚本任务。指定您的 @[User::Counter]
变量在 ReadOnly 集合中,然后将值发送到 运行 log
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 循环中设置任务的 Name
属性。右键单击循环中的任务和 select 属性。在“属性”部分找到 [+]Expressions
集合,然后单击右侧的省略号 ...
,然后在左侧的新 window、select 名称中设置右侧副词是
"My Task " + RIGHT("000" + (DT_WSTR,3) @[User::Counter], 3)
这将连接两个字符串 "My Task" 并将 Counter 变量转换为字符串并用零填充它,因此它始终是一个 3 位数字