mssql sql server 如何将已经存在列修改为自动增长(标识列)


摘要:
今天接到一个新需求,领导要求将已经存在的列修改为标识列,在网上搜索了大量的资料,
发现如果采用常规思路,不可能实现此要求,
下文将讲述采用”非常规”思路实现的原理



前言:
如果一个列需要转换为标识列,需满足以下条件:
1、此列中不能存在空值
2、此列转换时,需停止向此表插入数据操作(需停止当前业务运行)

例:

  create table A(keyId int ,name varchar(20))
go
insert into A(keyId,name)values(1,'a')
insert into A(keyId,name)values(20,'v')
insert into A(keyId,name)values(35,'C')
insert into A(keyId,name)values(60,'D')
go

----修改表名
sp_rename 'A','A_tmp'
go
----新建包含标识列的表
create table A(keyId int identity(1,1),name varchar(20))
go
---复制表数据至新表中
SET IDENTITY_Insert A ON  
insert into A(keyId,name) select keyId,name from A_tmp
SET IDENTITY_Insert A OFF
go
---测试标识列
insert into A(name)values('test')
go
select * from A 

---清除表
truncate table A_tmp
drop table A_tmp 


truncate table A 
drop table A 

mssql_sql修改列为标识列方法