Нельзя использовать переменную, которую вы заполняете в преобразовании количества строк, где-либо еще в том же потоке данных. На этапе PreExecute потока данных счетчик строк блокирует переменную. Попытка использовать переменную в компоненте Script приведет к тому, что Script попытается сделать то же самое (в то же время), и поэтому SSIS выдаст ошибку.
Но даже если этого не произошло, вот что еще происходит. Поскольку ваш поток данных работает и строки передаются в подсчет строк, он фактически не заполняет переменную SSIS счетчиком строк. Это было бы очень неэффективно, поскольку счетчик строк на самом деле является компонентом COM, а переменные служб SSIS - .Net. Использование ресурсов .Net из COM и наоборот «дорого». Таким образом, количество строк накапливает значение в локальной кодовой переменной. На этапе PostExecute счетчик строк помещает собранное значение в переменную SSIS. Ключевым моментом является то, что этап PostExecute происходит после завершения потока данных. Если бы вы могли просматривать переменную в любое время в середине потока данных (есть способы), вы бы увидели, что она оценена как ноль (или любое другое значение, которое было установлено до начала потока данных).
Если вы хотите использовать количество строк для выполнения условного действия или обновить строки в потоке, у вас есть пара вариантов:
- Вы можете разделить поток данных на два потока данных. Используйте файл RAW или таблицу SQL, чтобы сохранить данные «в процессе» в конце потока # 1, чтобы вы могли использовать их в начале потока № 2.
- Вы можете использовать Multicast для дублирования потока, компонент Aggregate для его подсчета, а затем выполнить перекрестное соединение, чтобы подсчитать число строк в каждой строке. (См. Выполнение перекрестного соединения (декартово произведение) в SSIS .)