2009-02-11 71 views
1

我需要一种工具或方法,允许传输数据并自动更新目标表中的外键。复制数据并保持新ID的参考完整性

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

这听起来像你只需要在一个数据库中的两个表。但是,当您将数据从一个数据库复制到另一个数据库时,传统上会使用“主”和“从”名称,如同在复制中一样。你能澄清吗? – 2009-02-11 18:16:07

+0

这不是复制。例如,示例表可以被命名为“作者”和“书”。 – pvieira 2009-02-11 21:43:26

回答

2

@约翰·桑塞姆:正确的金钱

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

调用存储过程这个插入

1

如果使用唯一标识符(GUID),而不是INT,那么你不需要当你从一个数据库移动到另一个更改ID值。