需要在主键上删除并重新创建带有标识(1:1)的SQL表

时间:2014-02-05 01:26:34

标签: sql sql-server-2008 primary-key

我有一张包含数百万条记录的表格。该表与其他一些表有1:N关系,而这个表也有一些1:N关系。这个表上的主键有自动增量i:1,这个主键用在那些链接表中,所以我必须保留这些id

我需要重新创建表格并进行一些更改。我可以重新创建表,但我需要一些关于如何保留自动生成的ID并填充它们的建议,以便它不会破坏与其他表的关系?或者还有其他办法来完成这种任务吗?

2 个答案:

答案 0 :(得分:1)

为什么不在不重新创建表的情况下对表进行更改?下面的示例向#TableA添加一列,然后更改其数据类型。或者,您可以将数据复制到另一个表,然后通过启用标识插入SET IDENTITY_INSERT ON然后插入标识值将其重新插入到重新创建的表中。

  create table #TableA
    (
        RecordId int identity(1, 1) primary key not null,
        Name nvarchar(128) not null
    )

    alter table #TableA
    add Dob datetime null


    alter table #TableA
    alter column Dob date null

身份插入示例:

SET IDENTITY_INSERT #TableA ON
INSERT INTO #TableA (RecordId, Name, Dob) Values (1, 'some name', '02/04/2014')
SET IDENTITY_INSERT #TableA OFF

答案 1 :(得分:1)

你需要set identity_insert [on|off]。这将允许插入和批量加载标识列。插入完成后,您需要使用reseed选项运行dbcc checkident以重置身份计数器。

不要忘记需要删除或禁用任何相关的约束(外键等)和可能在重新构建过程中导致问题的触发器。或者在完成后重新创建或重新启用它们。

完成所有操作后,您可能希望运行alter table foo check constraint ...以确认您没有破坏任何内容。

祝你好运!

[我建议您在开始前进行完整备份]