You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在SQL Server 2016中移除主键列的IDENTITY属性

在SQL Server 2016中移除主键列的IDENTITY属性的操作方法

嘿,这个问题我太熟悉了!在SQL Server 2016里,你没法直接用ALTER COLUMN命令去掉主键列的IDENTITY属性——因为SQL Server不支持直接修改IDENTITY属性,得用点间接的方法,下面是一步步的操作流程,亲测有效:

步骤1:先移除主键约束

因为IDENTITY列绑定了主键,得先把主键约束删掉。首先得知道主键约束的名字(很多时候不是默认的系统名),执行下面的查询获取:

SELECT name FROM sys.key_constraints 
WHERE type = 'PK' AND parent_object_id = OBJECT_ID('你的表名');

拿到约束名后,执行删除主键的语句:

ALTER TABLE 你的表名 DROP CONSTRAINT 主键约束名;

步骤2:添加新列并迁移数据

接下来创建一个和原主键列数据类型完全一致的新列,不要加IDENTITY属性

ALTER TABLE 你的表名 ADD 新列名 原列数据类型; -- 比如原列是INT,就写INT;如果是BIGINT就写BIGINT

然后把原IDENTITY列的数据全部复制到新列里:

UPDATE 你的表名 SET 新列名 = 原主键列名;

步骤3:替换原列并重新设置主键

现在可以删掉原来的IDENTITY列了:

ALTER TABLE 你的表名 DROP COLUMN 原主键列名;

把新列重命名为原来的列名(保持业务逻辑的一致性):

EXEC sp_rename '你的表名.新列名', '原主键列名', 'COLUMN';

最后重新给这个列加上主键约束:

ALTER TABLE 你的表名 ADD CONSTRAINT 主键约束名 PRIMARY KEY (原主键列名);

重要注意事项

  • 操作前一定要备份表:万一操作过程中出问题,能快速恢复数据。
  • 处理外键关联:如果其他表有外键关联这个主键,得先禁用或者删除外键约束,否则删除主键时会报错,操作完成后再重新建立外键。
  • 选择合适的操作时间:如果表的数据量很大,UPDATEALTER TABLE操作会锁表,尽量在业务低峰期执行。

内容的提问来源于stack exchange,提问作者Naga

火山引擎 最新活动