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

插入slaves时,我想知道 master_id 的新值是什么,以保持与原始表中相同的关系。

4

3 回答 3

4

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

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

有道理?

干杯,约翰

于 2009-02-11T17:53:55.460 回答
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

于 2009-02-11T18:09:32.380 回答
1

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

于 2009-02-11T17:54:05.600 回答