Использование служб SSIS для контейнера циклов, не выполняющих задачи сценария и задачи потока данных - PullRequest
0 голосов
/ 28 февраля 2019

Я обращаюсь к экспертам, когда столкнулся с недавним проектом.Я создал пакет служб SSIS (2008R2), который использует задачу сценария для построения оператора SQL, где в операторе SQL используется переменная (@month1), чтобы указать месяц просмотра в таблице членства.Я также хочу использовать переменную @month1 в качестве «счетчика» для контейнера цикла, чтобы указать, сколько раз выполнить запрос.Запрос SQL присоединяется к задаче потока данных, чтобы добавить эти записи в таблицу в базе данных сервера SQL.Задача сценария и задача потока данных работают вне контейнера цикла for с начальным значением, заданным для переменной @month1, но я не могу понять, как заставить контейнер цикла for обновить переменную @month1 "counter" так, чтобы forкаждый цикл может использовать его как «счетчик», а оператор SQL может использовать его как условие в созданном операторе SQL.У кого-нибудь есть идеи или примеры, как это сделать?

** Обновление ** Проблема заключается в контейнере For Loop.Задача сценария и задача потока данных работают вне контейнера For Loop.Он будет использовать начальную настройку переменной для @ month1 и создаст динамический сценарий sql, выполнит сценарий и передаст данные с исходного сервера базы данных на конечный исходный сервер.Проблема в том, что когда я помещаю эти шаги в контейнер For Loop, контейнер выполняется и становится зеленым, но не вызывает шаги внутри него.Вот почему я думаю, что контейнер не читает переменную @ month1, хотя переменная установлена ​​на уровне пакета.Есть мысли?

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Я ценю ответы каждого, но, кажется, я обманул себя на этом.В поисках самой сложной проблемы я упустил из виду самую простую и очевидную.Причина, по которой мой цикл For не выполнял шаги внутри контейнера, заключалась в том, что у меня было начальное значение для @month1, установленное на 3 (намеренно), и я хотел выполнить цикл до тех пор, пока оно не было разрешено на -49.В настройке EvalExpression он будет оцениваться до тех пор, пока утверждение не станет ЛОЖНЫМ ... так что оценка @month1 <= -49, которая была у меня там, уже была ложной.Это должно было быть @month1 > -49, поэтому, как только оно упадет до -49, утверждение станет ложным.Я делаю это для себя больше, чем должен признать, я не вижу леса за деревьями!

0 голосов
/ 03 марта 2019

Прежде всего, попробуйте установить для свойства потока данных Delay Validation значение True.Если это все еще не работает, вместо передачи переменной в качестве параметра в источнике OLEDB используйте выражения:

  1. Создайте переменную типа string.
  2. Измените его EvaluateAsExpression свойство на True
  3. Установите выражение, подобное:

    "select * from table 
     Where column =" + (dt_str, 50)@[User::month1]
    
  4. В источнике OLEDBвыберите режим доступа как SQL Command from variable и выберите эту переменную.

Имейте в виду, что переменная month1 не создается дважды в разных областях , щелкните поток данныхЗадача и проверьте панель переменных, если она показывает дополнительные переменные.

...