Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Delphi: Базы данных > Перенос данных из одинаковых таблиц разных баз данных


Автор: maxjuvefan 11.01.16, 09:37
Всем привет! У меня такой вопрос - есть 2 базы данных, в которых некоторые таблицы совпадают. Одна база находится на локальном компьютере, другая на сервере. На локальном компьютере есть база данных c более полной таблицей phone, нужно скопировать данные из этой таблицы и перенести их в точно такую же таблицу phone в базу данных, расположенную на сервере, то есть обновить ее, внести недостающие данные.

Для эксперимента я создал на локальном две маленькие базы, bd1 и bd2 с одинаковой таблицей phone и попытался перенести данные из bd2 в bd1:

insert bd1.dbo.Phone select * from bd2.dbo.Phone

Sql server 2008 выдал такую ошибку:

Значение столбца идентификаторов в таблице "bd1.dbo.Phone" может указываться явно только при использовании списка столбцов и когда IDENTITY_INSERT установлен в ON.

Кто чем может помочь?

Автор: Bas 11.01.16, 09:46
Видать есть поля с типом IDENTITY и они разные для одного и того же телефона.
1.Удалите записи в таблицы и вставьте новые, но есть риск нарушить целостность данных.
2.Добавлять только те телефоны которых нет в таблице приемнике.

Автор: Akina 11.01.16, 10:23
Цитата maxjuvefan @
попытался перенести данные из bd2 в bd1:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    insert bd1.dbo.Phone select * from bd2.dbo.Phone

Попытайтесь сделать нормально, а не тяп-ляп - перечислите вставляемые поля в секции INSERT и выбираемые в секции SELECT, исключив IDENTITY поля, есссно. Это как минирмум.
А по уму - используйте MERGE.

Автор: Bas 11.01.16, 10:53
Цитата Akina @
MERGE.

Все забываю что она есть в MS тоже.

Автор: Павел Калугин 11.01.16, 11:42
Цитата maxjuvefan @
Всем привет! У меня такой вопрос - есть 2 базы данных, в которых некоторые таблицы совпадают. Одна база находится на локальном компьютере, другая на сервере. На локальном компьютере есть база данных c более полной таблицей phone, нужно скопировать данные из этой таблицы и перенести их в точно такую же таблицу phone в базу данных, расположенную на сервере, то есть обновить ее, внести недостающие данные.

Для эксперимента я создал на локальном две маленькие базы, bd1 и bd2 с одинаковой таблицей phone и попытался перенести данные из bd2 в bd1:

insert bd1.dbo.Phone select * from bd2.dbo.Phone

Sql server 2008 выдал такую ошибку:

Значение столбца идентификаторов в таблице "bd1.dbo.Phone" может указываться явно только при использовании списка столбцов и когда IDENTITY_INSERT установлен в ON.

Кто чем может помочь?

Про identity уже написали
Следующая грабля будет нарушение целостности ключа (forin key)
Наверняка "телефоны" не просто так добавлены, а связаны с какой-нибудь сущностью. И наверняка между ними есть forin key и с вероятностью 146% в разных базах у одной и той же "сущности" id разные. Так что запрос будет несколько ... хмм .. или совсем не несколько... сложнее


Цитата Bas @
Цитата Akina @
MERGE.

Все забываю что она есть в MS тоже.

Некоторые и не знают, и потому аккуратно селекты пишут :'(

Автор: Akina 11.01.16, 12:11
Цитата Павел Калугин @
запрос будет несколько ... хмм .. или совсем не несколько... сложнее

Да пусть сперва хотя бы с несвязными данными разберётся в своей однотабличной модельке...

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)