Копирование данных и сохранение ссылочной целостности для новых идентификаторов - PullRequest
1 голос
/ 11 февраля 2009

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

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')

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

Ответы [ 3 ]

4 голосов
/ 11 февраля 2009

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

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

Имеет смысл?

Ура, Джон

2 голосов
/ 11 февраля 2009

@ Джон Сэнсом: прямо на деньги

@ 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 каждый раз, когда вы вставляете

1 голос
/ 11 февраля 2009

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

...