Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 перенос линкованных данных в другую базу  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
Добрый день, есть две абстолютно идентичные базы. Нужно перенести данные из одной в другую, но не все , а выборочно, и самое главное, нужно переносить "хвостом" и все данные что подвязаны к таблице по внешнему ключу, дабы в новой базе успешно проинсертилось.

Пример :
use DataBase1
Create table t1 (id int primary key);
Create table t2 (id int primary key, t1_id int foreign key references t1(id))

insert into t1
select 1
union all
select 2
union all
select 3

insert into t2
select 1,1
union all
select 2,1
union all
select 3,2
union all
select 4,3

Есть DataBase2 в которой уже созданы таблицы t1 и t2. Хочу перенести данные из таблицы t2 из базы DataBase1 в Базу2, предварительно не заполняя таблицу t1.

Есть ли тулза, которая затаскивает связанные данные? говорят redgate это умеет делать, правда ли? Может есть какая-то ссылка по моему вопросу. Спасибо ;)
24 янв 14, 20:29    [15465147]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Roul_Duke
Есть DataBase2 в которой уже созданы таблицы t1 и t2. Хочу перенести данные из таблицы t2 из базы DataBase1 в Базу2, предварительно не заполняя таблицу t1.

И в чем проблема ?
Наверное в том, что нарушается foreign key references ?
25 янв 14, 16:05    [15467722]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
Glory,
ну да, само собой. понимаете что я хочу:
проINSERT-ить запись в таблицу2, данные не проинсертятся так как есть внешний ключ на таблицу1, в которой записи по ключу нет, всё по честному. Вот я и ищу тулзу которая при инсерте создаст предварительно записи в таблице1(данные возьмёт опять же из базы1, в которой данные есть), а после уже проинсертит уже данные в таблицу2

Надеюсь понятно объяснил ;)
27 янв 14, 13:03    [15474499]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Roul_Duke
Надеюсь понятно объяснил ;)

И в чем проблема тогда ?
27 янв 14, 13:09    [15474542]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
Glory,

проблема не делать это ручками, а с помощью какой-то сторонней программки. Вопрос: Есть ли такая?
пробовал redgate generate,но он не совсем то что нужно
28 янв 14, 13:45    [15481655]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Roul_Duke
проблема не делать это ручками, а с помощью какой-то сторонней программки. Вопрос: Есть ли такая?

Вы ищите програмку, которая выполнит
insert db2.dbo.mytable2 select * from db1.dbo.mytable2 ???
28 янв 14, 13:48    [15481679]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
Glory,
Да ищу програмку которая выполнит такой инсерт, потому как он просто так не отработает!! Для него необходимо, чтобы в таблице table1 были данные(т.к. форин кей на table1). Я ищу програмку, которая заполнит все связанные таблицы данными для успешного инсерта.
понятно объяснил??
28 янв 14, 16:27    [15483238]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Roul_Duke
Да ищу програмку которая выполнит такой инсерт, потому как он просто так не отработает!! Для него необходимо, чтобы в таблице table1 были данные(т.к. форин кей на table1).

Т.е. программа должна будет выполнить 2 инсерта что ли ?
insert db2.dbo.mytable1 select * from db1.dbo.mytable1
insert db2.dbo.mytable2 select * from db1.dbo.mytable2

Roul_Duke
Я ищу програмку, которая заполнит все связанные таблицы данными для успешного инсерта.
понятно объяснил??

Т.е. которая просто выполнить insert-ы в нужном порядке ?
28 янв 14, 16:31    [15483278]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Roul_Duke,
Такая программа называеться - сиди учись :)
Сначала смотриш все связанные таблицы , выгружваеш их - патом свою... программ класса- СДЕЛАТЬ ТАК КАК Я ХОЧУ еще не придумали
28 янв 14, 16:42    [15483392]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
Glory,
Уважаемый Глори, ну да, что-то типа этого, но я в примере привёл только 2-е таблицы, а в реальности таблиц, связанных с той, в которую инсерт в районе 15-ти.

я прекрасно понимаю, что я должен вначале проинсертить вначале все 15 таблиц(а некоторые среди них тоже с внешними ключами)
чтобы в итоге вставить запись в свою основную таблицу.
Я думал, что есть уже механизмы, а не писать ручками, вот и всё ;)
что такого военного я не пойму ;) я всё сделал ещё в тот день когда создал этот топик, просто думал что есть тулзы, которые делают это, чтобы поставил галочки , нажал Compare и всё.
Думал народ в курсе
28 янв 14, 17:22    [15483706]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
Maxx,

На самом деле есть подобная программа, называется redgate, но там нет кастомной настройки полей ((
Ищу тулзу схожую с Redgate но с более глубокими настройками.
28 янв 14, 17:24    [15483721]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Glory
Member

Откуда:
Сообщений: 104760
Roul_Duke
Ищу тулзу схожую с Redgate но с более глубокими настройками.

Хорошее определение
А у вас есть такой же, но только с перламутровыми пуговицами ?
28 янв 14, 17:26    [15483733]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
Glory,
Ладно, я понял, такой тулзы нет. Что-ж... будем искать (или пилить самостоятельно) ;)
28 янв 14, 17:54    [15483951]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
Roul_Duke
Я думал, что есть уже механизмы, а не писать ручками, вот и всё ;)
Механизмов нет, потому что принципы вставки разные, зависят от того, есть ли альтернативный ключ у таблиц.
28 янв 14, 18:33    [15484192]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
Roul_Duke
Member

Откуда: Киев
Сообщений: 89
alexeyvg,
хм..основной запрос будет такой :
SELECT
OBJECT_NAME(constraint_object_id) AS FKName,
OBJECT_NAME(parent_object_id) AS TableName,
COL_NAME(parent_object_id, parent_column_id) AS ColumnName,
OBJECT_NAME(referenced_object_id) AS RefTableName,
COL_NAME(referenced_object_id, referenced_column_id) AS RefColumnName
FROM
sys.foreign_key_columns
where OBJECT_NAME(parent_object_id) = 'Table_name'
ORDER BY
FKName,
constraint_column_id;

смотришь все внешние ключи, лезешь в те таблицы, перед тем как вставить в них записи, смотришь их ключи, и опускаешся до самого нижнего уровня, ну и начинаешь делать вставку поднимаясь вверх. Вроде всё реально, нет?
28 янв 14, 18:51    [15484281]     Ответить | Цитировать Сообщить модератору
 Re: перенос линкованных данных в другую базу  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31430
Roul_Duke
ну и начинаешь делать вставку поднимаясь вверх
Как делать вставку?

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

Не, в принципе, зная модель данных, можно сделать хитрую утилиту, которая будет какие то записи вставлять в курсоре, а какие то одним стейтментом (или будет разбивать на блоки при необходимости уменьшить размер транзакции). Но вот нету такой утилиты :-( Можете написать...
28 янв 14, 18:56    [15484311]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить