从Access导入SQL Server后,如何保留ID的IDENTITY自增功能?
给已有数据的SQL Server表添加IDENTITY属性的方法
SQL Server不支持直接修改已存在的列来添加IDENTITY属性,系统提示需要删除重建表是符合预期的,但你不用重新从Access导入数据,通过以下步骤就能保留现有记录并完成设置:
方法一:创建临时表迁移数据
新建一个和原表结构一致的临时表,将ID列设为IDENTITY属性
CREATE TABLE Temp_OriginalTable ( ID INT IDENTITY(起始值,步长) PRIMARY KEY, -- 比如原表最大ID是100,就设IDENTITY(101,1) -- 复制原表的其他列定义,例如: Name VARCHAR(50), CreateTime DATETIME, -- 其余列依次列出 )开启IDENTITY_INSERT权限,将原表数据导入临时表
SET IDENTITY_INSERT Temp_OriginalTable ON; INSERT INTO Temp_OriginalTable (ID, Name, CreateTime, ...) SELECT ID, Name, CreateTime, ... FROM OriginalTable; SET IDENTITY_INSERT Temp_OriginalTable OFF;删除原表并将临时表重命名为原表名
DROP TABLE OriginalTable; EXEC sp_rename 'Temp_OriginalTable', 'OriginalTable';还原原表的索引、约束、触发器等对象(如果有)
方法二:用SELECT INTO快速重建表
这种方式更简洁,但需要后续手动补全约束和索引:
-- 创建带IDENTITY的新表并直接导入数据 SELECT ID = IDENTITY(INT, 起始值,步长), Name, CreateTime, -- 其余列 INTO New_OriginalTable FROM OriginalTable; -- 替换原表 DROP TABLE OriginalTable; EXEC sp_rename 'New_OriginalTable', 'OriginalTable';
注意事项
- 确定IDENTITY的起始值时,要参考原表现有ID的最大值,确保后续自动生成的ID不会和现有数据冲突
- 操作前务必备份原表数据,避免意外丢失
内容的提问来源于stack exchange,提问作者zaraboy
相关产品推荐
相关产品推荐

