Sql server 2008 使用自动编号外键创建重复记录

Sql server 2008 使用自动编号外键创建重复记录,sql-server-2008,replication,autonumber,Sql Server 2008,Replication,Autonumber,(使用SS2008)在sql server数据库中,我希望将一个客户端的所有数据复制到一个新客户端。换句话说,生成与客户机#1相关的所有记录的精确副本,但现在新记录的客户机ID字段引用客户机#2。这些都在同一个数据库中 通常,我会通过在相关表上选择client#1记录的一系列INSERT命令来实现这一点。但是,有些表具有自动编号ID列,这些ID在子表中作为外键引用。因此,在生成子表记录时,我需要知道并引用新创建的自动编号ID 最干净的方法是什么?可以通过SQL Server复制完成吗?我对SQL

(使用SS2008)在sql server数据库中,我希望将一个客户端的所有数据复制到一个新客户端。换句话说,生成与客户机#1相关的所有记录的精确副本,但现在新记录的客户机ID字段引用客户机#2。这些都在同一个数据库中

通常,我会通过在相关表上选择client#1记录的一系列INSERT命令来实现这一点。但是,有些表具有自动编号ID列,这些ID在子表中作为外键引用。因此,在生成子表记录时,我需要知道并引用新创建的自动编号ID


最干净的方法是什么?可以通过SQL Server复制完成吗?我对SQL Server的了解相当有限。

我会这样做:

-- Set up a placeholder for the new id
DECLARE @NewID INT;

-- INSERT parent record
INSERT INTO myTable (field1, field2)
SELECT field1, field2 FROM myTable WHERE ID = 1

-- Get the new ID
SET @NewID = (SELECT SCOPE_IDENTITY());

-- Insert child records with new id 
INSERT INTO OtherTable (fkid, field1, field2)
SELECT @NewID, field1, field2 FROM OtherTable WHERE ID = 1
现在,如果我们需要处理数千条记录,这可能会起作用:

-- Add a new column in the database to manage where the record came from
ALTER TABLE myTable ADD ParentID int NULL

-- INSERT parent record
INSERT INTO myTable (field1, field2, ParentID)
SELECT 
    field1
    , field2
    , ID 
FROM myTable 
WHERE SomeCondition IS True

-- Insert child records with new id 
INSERT INTO OtherTable (fkid, field1, field2)
SELECT 
    myTable.ID
    , OtherTable.field1
    , OtherTable.field2 
FROM 
    OtherTable 
    INNER JOIN myTable ON OtherTable.FKID = myTable.ParentID

-- Once unneeded, drop the temporary column
-- ALTER TABLE myTable DROP COLUMN ParentID

谢谢如果这是显而易见的,很抱歉,但是我如何推广这种方法,一次复制多(数千)条记录,每个记录都有唯一的自动编号id和子记录?我将在游标中执行此操作,或者可能在表上创建一个附加列来存储复制新记录的记录id。然后你可以大量插入最初的重复记录,然后通过new ParentID列获取他们的新ID…我在回答中添加了另一个示例,或者使用一个临时列来存储父ID>执行这种类型的工作。您可以使用合并和输出来创建原始ID和新ID之间的映射表。看看这个问题。