Изменение идентификаторов и обновление таблиц - PullRequest
2 голосов
/ 11 марта 2010

Мы пытаемся объединить две разные базы данных, но обе базы данных используют одинаковые идентификаторы. Разная информация, но у нас будет два пользователя с одинаковым ID. Есть ли способ, которым мы можем изменить идентификаторы в одной базе данных и затем обновить каждую из таблиц, используя этот идентификатор?

Ответы [ 4 ]

2 голосов
/ 11 марта 2010

Если у вас нет зависимостей, о которых можно позаботиться, на ум приходит действительно глупое простое решение:

псевдокод:

SELECT max(id) FROM database1.tablename
// Returns 10389

UPDATE database2.tablename SET id = (id + 10389)
// Sets 1st record to 10390
//      2nd record to 10391
//      3rd record to 10392
......
0 голосов
/ 11 марта 2010

предполагает, что никакая другая обработка не выполняется в базе данных 1 или базе данных 2, попробуйте:

1) В базе данных 1 получить максимальный идентификатор

2) в базе данных 2, удалить все внешние ключи, связанные с этим идентификатором

3) в базе данных 2, в таблице, где ID - это автоинкремент / идентификатор, вам нужно будет добавить новый столбец ID2 и заполнить его UPDATE YourTable SET ID2=ID+{max ID from database 1}, затем удалить исходный столбец ID, затем переименовать ID2 в ID

4) в базе данных 2 для всех других таблиц, которые используют этот идентификатор в качестве FK, измените идентификаторы, используя UPDATE OtherTable SET ID=ID+{max ID from database 1}

5) в базе данных 2 восстановить внешние ключи для проверки данных

6) в базе данных 2, экспорт данных в файл

7) в базе данных 1, импортировать файл из базы данных 2

0 голосов
/ 11 марта 2010

Мы работаем над таким проектом, и ответ - промежуточные таблицы. Подготовьте данные, которые вы собираетесь вставить, и добавьте столбец для нового идентификатора. Вставьте родительские записи и обновите новый идентификатор в промежуточной таблице (SQL-сервер помогает ей с предложением output, я не знаю о других dbs). Теперь, когда вы вставляете дочерние записи, вы используете новый идентификатор вместо старого. Альтернативой является добавление столбца для старого идентификатора в родительскую таблицу. Используйте его, чтобы присоединиться, чтобы получить новый идентификатор при вставке в дочерние таблицы. После переноса всех данных удалите столбец.

0 голосов
/ 11 марта 2010

Если это столбец идентификатора автоинкремента, вы можете просто сделать:


SELECT //(columns except id)
INTO new_table_name [IN otherdatabase]
FROM old_tablename

и тадаа!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...