SSIS 2008 с использованием одной и той же переменной для подсчета строк и компонента сценария - PullRequest
0 голосов
/ 05 августа 2011

У меня есть компонент подсчета строк, который использует глобальную переменную X для хранения числа; до этого момента это правило, но затем, если я добавлю компонент сценария, который имеет X среди своих переменных ReadOnly, и затем использую его внутри него для какой-то цели, поток зависнет на мгновение, а затем произойдет сбой, сказав, что для подсчета строк требуется допустимая переменная.

Разве невозможно сохранить количество строк в переменной, а затем прочитать эту переменную из скрипта comp.

Ответы [ 4 ]

8 голосов
/ 07 августа 2011

Нельзя использовать переменную, которую вы заполняете в преобразовании количества строк, где-либо еще в том же потоке данных. На этапе PreExecute потока данных счетчик строк блокирует переменную. Попытка использовать переменную в компоненте Script приведет к тому, что Script попытается сделать то же самое (в то же время), и поэтому SSIS выдаст ошибку.

Но даже если этого не произошло, вот что еще происходит. Поскольку ваш поток данных работает и строки передаются в подсчет строк, он фактически не заполняет переменную SSIS счетчиком строк. Это было бы очень неэффективно, поскольку счетчик строк на самом деле является компонентом COM, а переменные служб SSIS - .Net. Использование ресурсов .Net из COM и наоборот «дорого». Таким образом, количество строк накапливает значение в локальной кодовой переменной. На этапе PostExecute счетчик строк помещает собранное значение в переменную SSIS. Ключевым моментом является то, что этап PostExecute происходит после завершения потока данных. Если бы вы могли просматривать переменную в любое время в середине потока данных (есть способы), вы бы увидели, что она оценена как ноль (или любое другое значение, которое было установлено до начала потока данных).

Если вы хотите использовать количество строк для выполнения условного действия или обновить строки в потоке, у вас есть пара вариантов:

  • Вы можете разделить поток данных на два потока данных. Используйте файл RAW или таблицу SQL, чтобы сохранить данные «в процессе» в конце потока # 1, чтобы вы могли использовать их в начале потока № 2.
  • Вы можете использовать Multicast для дублирования потока, компонент Aggregate для его подсчета, а затем выполнить перекрестное соединение, чтобы подсчитать число строк в каждой строке. (См. Выполнение перекрестного соединения (декартово произведение) в SSIS .)
1 голос
/ 05 августа 2011

Нет, я не думаю, что можно использовать переменную, используемую в Row Count, для использования также в Script Component.

Насколько я понимаю, переменная заблокирована для записи в преобразовании Число строк и недоступна в преобразовании компонента сценария.

Итак, что вы пытаетесь сделать с переменной внутри компонента сценария?Если вы можете указать свои требования, может быть, кто-то может предложить альтернативу.

Статья в этой ссылке предлагает подход: http://consultingblogs.emc.com/jamiethomson/archive/2007/02/28/SSIS-Nugget_3A00_-Output-the-rowcount.aspx

0 голосов
/ 07 августа 2013

Большую часть времени я использовал Script в потоке управления и подсчете строк в потоке данных. 1) Если вы хотите, чтобы подсчет сначала сделал задачу потока данных (которая будет выполнять операцию подсчета строк) в потоке управления. 2) затем перетащите скрипт под ним и используйте количество строк.

вот пример того же. http://www.c -sharpcorner.com / uploadfile / muralidharan.d / как в использовании-ROWCOUNT-в-SSIS /

0 голосов
/ 02 августа 2013

Мы можем использовать ту же переменную 'Rowcount', чтобы использовать ее и в задаче сценария ... только когда область действия этой переменной находится на уровне пакета. [Глобальная переменная].

...