0

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

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

例如表第一(id,名称) - 表第二(id,地址)

所以现在这两个表都存在一个数据库中的值,我正在尝试将值从这个数据库复制到另一个数据库。

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

我怎样才能做到这一点?

使用 MSSQL 服务器 2000更新

4

3 回答 3

0

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

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

于 2011-09-29T17:18:35.673 回答
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 之间的映射。它可以是临时的新列,可以在“second”中的 id 更新后删除。

或者正如 Rich Andrews 所说,您可以使用 @scope_identity,但在这种情况下,您必须一个一个地执行插入 - 在源表上声明一个游标,插入每条记录,获取其新 id 并将其插入“第二个”表中。

于 2011-10-01T23:51:15.180 回答
0

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

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

于 2011-09-29T17:33:42.543 回答