2011-01-13 2 views
1

Мы разработали большую миграцию данных из одной схемы БД в другую. Мы построили его на основе идеи о том, что БД назначения будет пустым, однако несколько месяцев назад мы начали размещать клиентов в новом приложении, что означает, что их данные размещаются в новой схеме (БД назначения).Перенос данных с использованием SSIS Первичные ключи идентификации

Теперь мы находимся в ситуации, когда первичные ключи могут перекрываться от источника до базы данных назначения, и мы изо всех сил пытаемся найти решение. Единственное решение, о котором я могу думать, это проверить, существует ли идентификатор в месте назначения, обновить идентификатор в источнике, чтобы быть на 1 больше, чем наибольший идентификатор в месте назначения, а затем перенести запись. Это кажется очень громоздким для сотен столов. Есть идеи?

+0

Возможно ли иметь только два набора таблиц, с которыми вы соединяетесь? Как правило, не рекомендуется начинать редактирование ПК при вставке записей - у вас будут проблемы с целостностью данных в течение долгого времени. – JNK

ответ

2

Извините, я ничего не знаю о SSIS, но следующие несколько способов решить проблему с помощью SQL.

При вставке в таблицы назначения не вставляйте идентификаторы. Когда строки вставлены, захватите вновь вставленные идентификаторы и старые идентификаторы в таблице сопоставления, см. MERGE + OUTPUT INTO. Используйте таблицу сопоставления для обновления таблиц, которые не были вставлены, заменив старые идентификаторы новыми идентификаторами.

Разумеется, для этого необходимо вставлять в таблицы в порядке, не вызывающем нарушения внешнего ключа или ограничения.

Если вы не занимаетесь этим, и вы можете блокировать пользователей из таблиц в течение коротких периодов времени, DBCC CHECK INDENT может использоваться для «резервирования» идентификаторов. Эти новые идентификаторы затем могут быть использованы для обновления старых данных, а затем вставляются с SET IDENTITY_INSERT ON.

Смежные вопросы