Влияет ли значение переменной, заданное преобразованием подсчета строк, во время выполнения DFT в службах SSIS? или условное разделение может правильно прочитать переменную?

У меня есть пакет SSIS, через который проходит 1 запись (жестко закодированная).

введите здесь описание изображения

У меня есть переменная в области ДПФ.

введите здесь описание изображения

Я присваиваю значение переменной с помощью преобразования подсчета строк.

введите здесь описание изображения

Значение должно быть 1. Я проверяю его с помощью компонента сценария.

 public override void PostExecute()
  {
    System.Windows.Forms.MessageBox.Show(ReadWriteVariables[0].Value.ToString());
    base.PostExecute();
    /*
      Add your code here for postprocessing or remove if not needed
      You can set read/write variables here, for example:
      Variables.MyIntVar = 100
    */
  }

Я ищу нулевое условие через условие в преобразовании условного разделения.

введите здесь описание изображения

Как ни странно, он удовлетворяет условию, равному нулю, хотя я думаю, что он должен иметь значение 1. Даже Messagebox через компонент сценария показывает значение 1.

введите здесь описание изображения

Что может быть причиной? Реализуется ли значение в переменной только ближе к концу DFT или условное разделение имеет некоторые проблемы с чтением правильного значения или что-то еще, что я не могу придумать?


person Pritesh    schedule 13.03.2013    source источник


Ответы (2)


Значение для variable, назначенное внутри data flow task, нельзя использовать в split transformation или более поздних версиях задачи потока данных. Значения обычно получают populated, когда ДПФ получает completed.

Variable values does not update during the execution of Data Flow task 

Несмотря на то, что вы можете увидеть value 1 или установить какое-либо другое значение Variable из преобразования сценария в событиях после или перед выполнением, эти значения вступают в силу только после выполнения DFT

Следовательно, обновленное значение можно использовать в ограничении приоритета или других задачах в потоке управления.

Прочтите эту статью .

person praveen    schedule 13.03.2013
comment
Благодарность! У меня в пакете огромное количество ETL (DFT). Я хочу сделать некоторое прямое заполнение (в основном взять другой поток), когда я получаю нулевые записи из источника. как мне попробовать? Мой условный подход разделения/подсчета строк не удался. - person Pritesh; 13.03.2013
comment
Хотя это не особенно умно или эффективно, вы можете просто запустить SELECT COUNT(*) FROM Blah заранее и сохранить это значение в переменной. Это требует дублирования вашего запроса и дополнительного прохода данных. - person Nick.McDermaid; 14.03.2013

В качестве альтернативы вы можете использовать функцию RANK в качестве одного из столбцов, последний использует условное разделение с максимальной функцией, чтобы получить количество выбранных строк (при непосредственном подсчете строк). Затем вы можете использовать столбец «Копировать» и удалить столбец RANK перед вставкой в ​​​​конечный пункт назначения. Надеюсь это поможет!

person Anant Rai    schedule 09.12.2014