使用输出捕获自动增量标识,加上过去的标识映射表

时间:2014-05-13 21:37:53

标签: sql sql-server sql-server-2008

我正在尝试使用新的clientID在SQL中制作精确的数据副本,但也要将现有数据保留在旧客户端中。我将数据插入到具有自动递增整数主键ID的表中。我需要保留Old记录的ID和新记录,这样我就可以继续使用这个映射,因为我复制了不同的表数据,所以我可以保持关系。

此时我有以下内容:

INSERT INTO [dbo].[Driver]
OUTPUT inserted.ID
       inserted.Name
       inserted.ClientID
SELECT Name,
       1234 AS clientID
FROM dbo.Driver

我想知道是否有办法在输出中选择驱动程序的旧ID,然后我可以使用OUTPUT将所有这些插入到保持表中。因此,在执行dbo.Driver表中的插入后,我需要最终得到以下内容,以便我也可以将这些值插入到临时表中:

NewID
OldID
Name
ClientID

此时我不知道如何从原始记录中提取原始ID。

2 个答案:

答案 0 :(得分:0)

你可以试试......

INSERT INTO dbo.Driver (oldID, Name, clientID)
SELECT
   B.ID,
   A.Name,
   1234 AS clientID
FROM dbo.Driver A
LEFT JOIN dbo.Driver B ON A.Name = B.Name AND A.clientID = b.clientID

或者只是

INSERT INTO dbo.Driver (oldID, Name, clientID)
SELECT
    ID,
    Name,
    1234 AS clientID
FROM dbo.Drive

答案 1 :(得分:0)

我最终使用MERGE INTO按照以下SO帖子跟踪旧ID: How to use OUTPUT to capture new and old ID?