Я знаю, что продолжаю выдавать C# решения проблем SSIS, но это именно то, что я делаю, чтобы предотвратить выполнение задания / процесса во время выполнения задания.
У меня есть функция, которая выполняет эту проверку и возвращает логическое значение true / false. Используйте этот результат, чтобы определить, следует ли запускать задание или нет.
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
, который возвращает набор данных работ, которые в данный момент выполняются.
Расширение для вашего приложения
Вот как будет выглядеть ваш поток управления: