Конфликты идентичности первичного ключа миграции данных служб SSIS - PullRequest
1 голос
/ 13 января 2011

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

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

1 Ответ

2 голосов
/ 14 января 2011

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

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

Конечно, чтобы это работало, вставка в таблицы должна выполняться в порядке, который не вызовет нарушения внешнего ключа или ограничения.

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

...