我有一张包含数百万条记录的表格。该表与其他一些表有1:N关系,而这个表也有一些1:N关系。这个表上的主键有自动增量i:1,这个主键用在那些链接表中,所以我必须保留这些id
我需要重新创建表格并进行一些更改。我可以重新创建表,但我需要一些关于如何保留自动生成的ID并填充它们的建议,以便它不会破坏与其他表的关系?或者还有其他办法来完成这种任务吗?
答案 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 ...
以确认您没有破坏任何内容。
祝你好运!
[我建议您在开始前进行完整备份]