Контейнер Foreach L oop в предложении SSIS - PullRequest
1 голос
/ 20 февраля 2020

У меня есть для каждого контейнера l oop в моем главном пакете служб SSIS. Существует пункт «Выполнить задачу пакета» под этим «Выполнить SQL Задача задания агента сервера». (В нем 35 шагов)

Проблема: мастер-пакет служб SSIS запускает следующую итерацию без завершения всех шагов в «Выполнить SQL Задание агента сервера».

Пожалуйста, предложите подход, чтобы начать следующую итерацию только после завершения всех шагов.

Заранее спасибо:)

1 Ответ

1 голос
/ 20 февраля 2020

Я знаю, что продолжаю выдавать 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

, который возвращает набор данных работ, которые в данный момент выполняются.

Расширение для вашего приложения

Вот как будет выглядеть ваш поток управления:

enter image description here

...