从包含自增列的表中复制数据

3
我在SQL Server中有一张表,其中包含一个自增列的数据。自增列中的数据不是连续的,例如1, 2, 3, 5, 6, 7, 9(缺失了4和8)。
我想将这张表中的数据精确地复制到另一张完全相同但为空的表中。目标表也有一个自增列。
问题:当我使用以下查询复制数据时,AttachmentID具有新的不同值。
INSERT INTO FPSDB_new.dbo.Form_Attachment
    SELECT
        CategoryID
    FROM
        FPSDB.dbo.Form_Attachment

目的地和源数据库中的Form_Attachment表如下所示:

CREATE TABLE [dbo].[Form_Attachment] 
(
    [AttachmentID] [int] IDENTITY(1,1) NOT NULL,
    [CategoryID]   [int] NULL
)

是否有SQL查询解决方案可以使两个包含相同数据的表合并?

3个回答

8

您可以通过在事务中使用 SET IDENTITY_INSERT ON 来插入到一个 IDENTITY 列(别忘了之后将其关闭):

如何在 SQL Server 2008 中打开和关闭 IDENTITY_INSERT?

SET IDENTITY_INSERT FPSDB_new.dbo.Form_Attachment ON

INSERT INTO FPSDB_new.dbo.Form_Attachment ( AttachmentID, CategoryID )
SELECT
    AttachmentID,
    CategoryID
FROM
    FPSDB.dbo.Form_Attachment

SET IDENTITY_INSERT FPSDB_new.dbo.Form_Attachment OFF

你的答案是正确的,但如果目标表中已经有数据,并且我想用源表的行替换它们,那么我该如何更新目标表的行? - Shomaail
@shomaail,您需要首先“删除”匹配的行。或者可以考虑使用“合并”操作。 - Dai

1
你也可以这样做:

  1. Drop the copy table

  2. Create as select, which will copy the exact structure and data to the new table.

    Select * 
    into new_table  
    from old_table 
    

1
你可以使用此命令:SET IDENTITY_INSERT 将其设置为 ON。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接