Я разрабатываю пакеты служб SSIS, которые состоят из 2 основных этапов:
Шаг 1 : Соберите все виды данных из существующих устаревших систем и поместите их в серию промежуточных таблиц в моей базе данных.
Шаг 2 : переместить данные из моих промежуточных таблиц в более реляционный набор таблиц, который я использую специально для своего проекта.
На шаге 1 я просто делаю объем SELECT
и объем INSERT
; однако на шаге 2 я делаю построчную вставку в мои таблицы с помощью задач OLEDB Command, чтобы можно было регистрировать очень специфическую активность на уровне строк для всего, что происходит. Вот мой общий план для шагов 2 процессов.
альтернативный текст http://dl.dropbox.com/u/2468578/screenshots/step_1.png
Вы увидите 3 задачи OLEDB: 1 для фактического INSERT
и 2 для успеха / неудачи INSERT
с в нашей таблице журналирования.
Главное, что я регистрирую - это исходная таблица / идентификатор и таблица назначения / идентификатор для каждой строки, проходящей через этот поток. Я храню эти вещи в переменных и добавляю их в поток данных с использованием производного столбца, чтобы их можно было легко сопоставить с параметрами запроса хранимых процедур.
альтернативный текст http://dl.dropbox.com/u/2468578/screenshots/step_3.png
Я решил хранить эти значения регистрации в переменных вместо жесткого кодирования значений в поле SqlCommand в задаче, потому что я почти уверен, что вы НЕ МОЖЕТЕ поместить переменные выражения в это поле (т.е. exec storedproc @[User::VariableName],... ,... ,...
). Итак, это лучшее решение, которое я нашел.
альтернативный текст http://dl.dropbox.com/u/2468578/screenshots/step_2.png
Это лучшее решение? Вероятно, нет.
Разумно ли с точки зрения производительности добавлять 4 столбца журналирования в поток данных, состоящий из 500 000 записей? Наверное, нет.
Можете ли вы придумать лучший способ?