2009-02-11 2 views
1

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

SET IDENTITY_INSERT ON/OFF не то, что я ищу.

Пример:

table master (id int identity, name char) 
table slave (id int identity, master_id int, name char) 

Я хотел бы создать сценарий, как это:

insert into master(name) values ('master a') 
insert into master(name) values ('master b') 

insert into slave(master_id,name) values (?, 'slave aa') 
insert into slave(master_id,name) values (?, 'slave bb') 
insert into slave(master_id,name) values (?, 'slave cc') 
insert into slave(master_id,name) values (?, 'slave dd') 

При установке рабов, я хотел бы знать, что это новое значение master_id , чтобы сохранить те же отношения, что и в исходной таблице.

+0

Это звучит, как вы просто есть две таблицы в одной базе данных. Но имена «master» и «slave» традиционно используются, когда вы копируете данные из одной базы данных в другую, как в репликации. Вы можете уточнить? –

+0

Это не репликация. Например, таблицы примеров можно назвать «Автор» и «Книга». – pvieira

+0

Вы попробовали мой sproc? это должно делать именно то, что вы хотите. –

ответ

2

@John Sansom: право на деньги

@ pv2008:

create proc InsertAndUpdate 
@parentName varchar(255), 
@childName varchar(255) 

as 
declare @newParentId int 
insert into PARENT values (@parentName) 
select @newParentId = SCOPE_IDENTITY() 

insert into CHILD values (@newParentId, @childName) 

вызова это sproc каждый раз, когда вы вставляете

4

Если вы используете столбцы Identity в своих таблицах, функция SCOPE_IDENTITY() вернет идентификатор последней вставленной записи. Затем вы можете использовать это как внешний ключ для вторичной таблицы.

http://msdn.microsoft.com/en-us/library/ms190315.aspx

смысл Make?

Cheers, Джон

1

Если вы используете UniqueIdentifier (Guid) вместо междунар, то вам не нужно изменять значение идентификатора при перемещении их из одной базы данных в другую.

+0

Спасибо, но это устаревшие данные - я не могу изменить схему. – pvieira