sql-server - SSIS 建议中的 Foreach 循环容器
问题描述
我的 SSIS 主包中有 for-each 循环容器在此“执行 SQL Server 代理作业任务”下有“执行包任务”。(它有 35 个步骤)
问题:SSIS 主包正在开始下一次迭代,但未完成“执行 SQL Server 代理作业任务”中的所有步骤。
请建议仅在完成所有步骤后开始下一次迭代的方法。
提前致谢 :)
解决方案
我知道我一直在 SSIS 问题上抛出 C# 解决方案,但这正是我为了防止作业/进程在作业运行时运行而做的。
我有一个执行此检查并返回布尔值真/假的函数。使用该结果来确定是否开始作业。
public static bool isDatabaseUpdating()
{
List<string> jobs = new List<string>();
jobs.Add("[Insert name of Job here]");
jobs.Add("[Insert another job and so on here]");
string sql = "exec msdb.dbo.sp_help_job @execution_status = 1";
using (OleDbConnection conn = new OleDbConnection(cstr))
{
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
{
cmd.CommandType = CommandType.Text;
cmd.Connection.Open();
OleDbDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
if (jobs.Contains(rdr["name"].ToString())) return true;
}
}
}
return false;
}
要使用它,请像这样设置一个 SSIS 变量:
Dts.Variables["@variableName"].Value = isDatabaseUpdating();
然后在控制流中适当地设置路径上的表达式。
理解这个函数的真正关键是 SQL。
exec msdb.dbo.sp_help_job @execution_status = 1
这将返回当前正在运行的作业数据集。
增强您的应用程序
这就是您的控制流的样子:
推荐阅读
- html - 自定义复选框设计
- javascript - 反应不从另一个组件调用函数?
- php - 使用散列密码的安全登录和注册系统
- matlab - 计算、存储和绘制线和多边形的交点
- powershell - Powershell 输出为数组
- arrays - 如何将固定长度的十六进制符文数组转换为单个整数
- javascript - 为什么当我调用 api 时我的代码会无限循环?
- python - 按值范围Python查找时间间隔
- powerbi - Calendar/GenerateSeries DAX 函数给出错误“日历函数中的开始日期或结束日期不能为空白值”。
- r - R - 使用序列但排除特定数字的 For 循环