ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql server自增主键变为非自增,sequence控制id值

2021-11-18 18:02:42  阅读:171  来源: 互联网

标签:自增 sequence DATETIME2 主键 job biz null id history


之前使用的表的主键为id自增,现在想变成由sequence来控制id值的增加,不能删除现有数据,数据一直保持在数据库中。

之前的schema:

create table biz_job_history (
  id BIGINT identity not null
  , job_id VARCHAR(32)
  , start_time DATETIME2
  , end_time DATETIME2
  , status VARCHAR(32)
  , result NVARCHAR(max)
  , created_date DATE default GETDATE() not null
  , created_at DATETIME2 default SYSDATETIME() not null
  , updated_at DATETIME2 default SYSDATETIME() not null
  , updated_by VARCHAR(64) not null
  , constraint biz_job_history_PKC primary key nonclustered (id)
) ;

目标schemal:

create table biz_job_history (
  id BIGINT not null
  , job_id VARCHAR(32)
  , start_time DATETIME2
  , end_time DATETIME2
  , status VARCHAR(32)
  , result NVARCHAR(max)
  , created_date DATE default GETDATE() not null
  , created_at DATETIME2 default SYSDATETIME() not null
  , updated_at DATETIME2 default SYSDATETIME() not null
  , updated_by VARCHAR(64) not null
  , constraint biz_job_history_PKC primary key nonclustered (id)
) ;

if not exists(select * from sys.sequences where name = N'biz_job_history_seq')
create sequence biz_job_history_seq as BIGINT
    start with 1
    increment by 1
    no maxvalue
go;

 

不重新建表,仅修改数据库所需要的操作:

// 新建一列
alter table biz_job_history add id_copy BIGINT not null default 0;
// 之前id的数据储存到新建的一列
update biz_job_history set id_copy=id;
// 删除表的主键
alter table biz_job_history drop constraint biz_job_history_PKC;
// 删除id列
ALTER  TABLE biz_job_history DROP column id;
// 将新建的列重命名为id
exec sp_rename 'biz_job_history.id_copy','id','column';
//设置id为表的主键
alter table biz_job_history add constraint biz_job_history_PKC primary key nonclustered (id);

// 获取当前数据id的最大值
select top 1 id from biz_job_history order by created_at desc   --时间倒序排列取第一条

// 使用上一个sql获取的最大值val,定义sequence的开始值
if not exists(select * from sys.sequences where name = N'biz_job_history_seq')
create sequence biz_job_history_seq as BIGINT
    start with val
    increment by 1
    no maxvalue
go;

 

标签:自增,sequence,DATETIME2,主键,job,biz,null,id,history
来源: https://www.cnblogs.com/qliu85/p/15573594.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有