Обнаружение нового столбца в источнике, не сопоставленном с пунктом назначения, и сбой в службах SSIS
Как вызвать сбой пакета служб SSIS 2017, если столбец в исходной таблице не имеет соответствующего столбца в таблице назначения или, по крайней мере, намеренное решение не включать его?
Я сделал таблицу в обоих называемых test с одной колонкой, testcol. SSIS передает данные. Теперь я добавил testcol2 к источнику, но не к месту назначения. Работа по-прежнему работает нормально, как сегодня, но я хочу, чтобы это не сработало и сообщило об ошибке несопоставленного столбца.
1 ответ
Обновление 1
После более подробного исследования этой проблемы, похоже, что ValidatExternalMetadata
не делает то, что вы ищете. Он будет отслеживать только изменения метаданных, произошедшие в выбранных столбцах.
Исходя из этого, я не думаю, что в SSIS есть возможность сделать это, вы должны добавить свою собственную проверку в пакет, такой как:
- Объявите переменную, которая содержит количество столбцов (при создании пакета), затем добавьте задачу "Выполнение SQL", которая проверяет текущее количество столбцов (
SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ?
) Если количество не совпадает, тогда выведите исключение. - Создайте справочную таблицу, которая содержит столбцы исходной таблицы, и добавьте задачу "Выполнение SQL", чтобы проверить, есть ли новые добавленные столбцы (
SELECT Count(*) FROM Information_schema.Column T1 LEFT JOIN Source Columns T2 ON T1.COLUMN_NAME = T2.Column_name WHERE T2.Column_Name IS NULL
) затем вы проверяете, равен ли результат> 0, а затем выдает исключение. - Используйте задачу "Выполнение SQL" для чтения из таблицы аудита схемы базы данных:
Начальный ответ
Вы можете добиться этого, установив источник OLEDB ValidatExternalMetadata
собственность на True
,
Когда добавляются новые столбцы, он должен выдавать исключение типа.
VS_NEEDSNEWMETADATA
Имейте в виду, что это может занять дополнительное время при выполнении пакета.
Для получения дополнительной информации обратитесь к: