Как перемещать данные между несколькими таблицами базы данных, поддерживая отношения внешнего ключа / ссылочную целостность? - PullRequest
3 голосов
/ 03 февраля 2010

Я пытаюсь найти лучший способ переместить / объединить несколько таблиц ценности данных из нескольких баз данных в одну.

У меня есть схема, подобная следующей:

CREATE TABLE Products(
    ProductID int IDENTITY(1,1) NOT NULL,
    Name varchar(250) NOT NULL,
    Description varchar(1000) NOT NULL,
    ImageID int NULL
)

CREATE TABLE Images (
    ImageID int IDENTITY(1,1) NOT NULL,
    ImageData image NOT NULL
)

С внешним ключом продуктов ImageID to Image 'ImageID.

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

Ответы [ 3 ]

3 голосов
/ 03 февраля 2010

В SQL Server вы можете включить идентификационные вставки:

SET IDENTITY_INSERT NewTable ON
<insert queries here>
SET IDENTITY_INSERT NewTable OFF

Пока вставка идентификатора включена, вы можете вставить значение в столбец идентификаторов, как и любой другой столбец. Это позволяет вам просто скопировать таблицы, например, со связанного сервера:

insert into newdb.dbo.NewTable
select *
from oldserver.olddb.dbo.OldTable
1 голос
/ 03 февраля 2010

Я выставляю данные в промежуточные таблицы (добавляя в каждый столбец newid). Я временно добавляю столбец к таблице, которую я объединяю, это Oldid. Я вставляю данные в родительскую таблицу, помещая правильный oldid в столбец oldid. Я использую столбец oldid, чтобы присоединиться к промежуточной таблице, чтобы заполнить столбец newid в промежуточной таблице. Теперь у меня есть новые идентификаторы FK для дочерних таблиц и ccan insert, использующие их. Если у вас SQL Server 2008, вы можете использовать предложение OUTPUT, чтобы вернуть старые и новые значения во временную таблицу, а затем использовать оттуда вместо dding столбца. Я предпочитаю, чтобы изменения были явно сохранены в промежуточной таблице для устранения проблем в процессе преобразования. В конце обнуляйте значения в столбце inteh oldid, если вы собираетесь добавить записи из третьей базы данных или удалите их, если все готово. Оставьте промежуточные столы на месте примерно на месяц, чтобы облегчить исследование любых вопросов.

0 голосов
/ 03 февраля 2010

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

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