Ладно, это хорошие новости / плохие новости, я боюсь. Сначала хорошие новости и немного предыстории, которую вы, возможно, знаете, но я опущу ее, если вы этого не сделаете.
Вы обычно не можете вставить что-либо в столбцы IDENTITY. Конечно, как и все в жизни, бывают моменты, когда это необходимо, и это можно сделать с помощью параметра IDENTITY_INSERT.
SET IDENTITY_INSERT MyTable ON
INSERT INTO MyTable (
MyIdCol,
Etc…
)
SELECT SourceIdCol,
Etc…
FROM MySourceTable
SET IDENTITY_INSERT MyTable OFF
Теперь вы говорите, что у вас есть суррогатные ключи в цели, но затем вы говорите, что они могут конфликтовать. Так что я немного запутался ... Используете ли вы ключи из источника (например, столбцы IDENTITY) или генерируете новые ключи в цели? Я настоятельно рекомендую не пытаться объединить пространства ключей в одном столбце ключей. Если вам нужно сохранить ключи, я бы предложил многопольный ключ, использующий что-то вроде SourceSystemId, чтобы они оставались уникальными.
Наконец, плохие новости: SSIS не предоставляет простого способа использования опции IDENTITY_INSERT. Единственный способ, которым я смог это сделать, - включить его в задачу SQL, которая выполняется перед задачей вставки. Вы должны быть в состоянии передать имя таблицы в скрипт как переменную. После этого обязательно включите еще одну задачу SQL, чтобы отключить ее, поскольку одновременно можно использовать только одну таблицу.