复制数据并保持新ID的参照完整性

时间:2009-02-11 17:49:43

标签: sql sql-server insert foreign-keys

我需要一种工具或方法,允许传输数据并自动更新目标表中的外键。

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 个答案:

答案 0 :(得分:4)

如果在表中使用Identity列,则函数SCOPE_IDENTITY()将返回上次插入记录的ID。然后,您可以将其用作辅助表的外键。

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

有意义吗?

干杯,约翰

答案 1 :(得分: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

答案 2 :(得分:1)

如果使用UniqueIdentifier(Guid)而不是int,则在将它们从一个数据库移动到另一个数据库时,无需更改ID值。