Sql 2005 перенос данных - PullRequest
       12

Sql 2005 перенос данных

1 голос
/ 21 января 2009

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

.

A) Использование GUID (неудобно, но работает везде) B) Присвоение диапазонов идентичности, что-то вроде «нет», но означает, что вы все равно можете получить доступ к записям по порядку, легко настроить базовый Sql и выбрать записи, а также определить, с какого компьютера были получены данные.

Мой вопрос заключается в том, каков наилучший способ переназначения (т.е. изменения первичных ключей) в одной из баз данных, чтобы данные больше не конфликтовали. Мы рассматриваем всего 6 таблиц, но много строк ~ 2M в 3 таблицах.

Обновление - есть ли какой-нибудь реальный SQL-код, который делает это, я знаю об Identity Insert и т. Д. Я уже решил эту проблему несколькими не элегантными способами, и я искал элегантное решение, предпочтительнее с хорошим TSQL SP для выполнения осла - если его не существует, я его кодирую и размещаю в вики.

Ответы [ 2 ]

0 голосов
/ 21 января 2015

Я бы сначала добавил в таблицу еще один столбец, заполнив его новым Primary key.

Тогда я бы использовал операторы обновления для обновления новых полей foreign key во всех связанных таблицах.

Затем вы можете удалить старые Primary key и старые foreign key поля.

0 голосов
/ 21 января 2009

Упрощенным способом является изменение всех ключей в одной из баз данных с фиксированным шагом, скажем, 10 000 000, и они выстроятся в линию. Чтобы сделать это, вам придется отключить приложения, чтобы база данных работала тихо, и отбросить все ссылки FK, затронутые этим, воссоздав их по окончании. Вам также придется сбросить начальное значение во всех затронутых столбцах идентификации на соответствующее значение.

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

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

...