Sql 复制数据并保持新ID的引用完整性

Sql 复制数据并保持新ID的引用完整性,sql,sql-server,insert,foreign-keys,Sql,Sql Server,Insert,Foreign Keys,我需要一个工具或方法,允许传输数据并自动更新目标表中的外键 设置标识插入开/关不是我想要的 例如: 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')

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

设置标识插入开/关不是我想要的

例如:

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

插入从属时,我想知道主id的新值是多少,以便保持与原始表中相同的关系。

如果在表中使用标识列,函数SCOPE\u Identity将返回上次插入记录的id。然后可以将其用作辅助表的外键

有道理吗


干杯,John

如果您在表中使用标识列,函数SCOPE\u Identity将返回上次插入记录的ID。然后可以将其用作辅助表的外键

有道理吗


干杯,John如果您使用UniqueIdentifier Guid而不是int,那么在将ID值从一个数据库移动到另一个数据库时就不需要更改ID值。

如果您使用UniqueIdentifier Guid而不是int,那么,当您将ID值从一个数据库移动到另一个数据库时,您就不需要更改ID值。

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

每次插入时都称之为“狂欢”

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

每次插入时调用此存储过程

谢谢,但这是旧数据-我无法更改架构。谢谢,但这是旧数据-我无法更改架构。听起来好像一个数据库中只有两个表。但是,传统上,当您将数据从一个数据库复制到另一个数据库时,会使用master和slave的名称,就像在复制中一样。你能澄清一下吗?这不是复制。例如,示例表可以命名为Author和Book。您是否尝试过我的存储过程?这应该正是您想要的。听起来您只是在一个数据库中有两个表。但是,传统上,当您将数据从一个数据库复制到另一个数据库时,会使用master和slave的名称,就像在复制中一样。你能澄清一下吗?这不是复制。例如,示例表可以命名为Author和Book。您是否尝试过我的存储过程?这正是你想要的。