使用Identity和外键列插入表中

时间:2011-09-29 07:37:03

标签: tsql foreign-keys identity identity-insert

我试图从两个不同的数据库中将值从一个表插入到另一个表中。

我的问题是我有两个关系表,第一个表也有一个标识列。

例如第一个表(id,Name) - 表第二个(id,地址)

所以现在这两个表都存在于db中的值,我正在尝试将此db中的值复制到另一个db。

因此,当我将值从第一个db插入到第二个db时,第一个表将自动插入Id列的值,所以现在我必须将该id链接到第二个表。

我该怎么做?

使用MSSQL server 2000

UPDATE

3 个答案:

答案 0 :(得分:0)

您可以在SQL server 2000中插入后立即使用@scope_identity,它将为您提供当前范围内的最后一个ID,但我不确定如何批量插入数据

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

答案 1 :(得分:0)

如果这是SQL Server 2005或更高版本,我建议使用insert语句中的output子句来检索刚刚插入的ID,但这在SQL Server 2000中不可用。

如果您的数据包含除标识列以外的唯一列或列系列,那么您可以根据该系列列查询第一个表以获取ID并使用它来填充第二个表。

答案 2 :(得分:0)

如果目标表为空,则可以使用SET IDENTITY_INSERT ON - 这将允许将原始值插入标识列,并且您不必更新引用的ID。当然,如果有任何现有的ID可以重叠插入的ID - 这不是解决方案。

如果第一个表中的名称是唯一的,您可以在新旧ID之间进行映射并执行如下更新:

UPDATE S
SET S.id = F.id
FROM second S
INNER JOIN first_original FO ON FO.id = S.id
INNER JOIN first F ON F.name = FO.name

如果名称不唯一,则原始ID应保存在“first”中,以便提供旧ID和新ID之间的映射。它可以是临时的新列,可以在“秒”中的ID更新后删除。

或者Rich Richs说你可以使用@scope_identity,但在这种情况下你必须逐个执行插入 - 在源表上声明一个游标,插入每个记录,获取它的新id并将其插入“second”表