sqlserver 自增长需求

有一个需求,已经解决好了,希望能对以后遇到类似情况的朋友有所帮助!
前提:
  第一:数据库是sqlserver2000。
  第二:有很多数据库,名字不同,但是里面的表是差不多的,都存在数据了。
需求:
  要把数据库中相同表某一个int型字段要设置为自增长类型(增长幅度1),且数据不能发生改变。
比如:
  A表中B字段是int型的,现在要把B字段变成自增长类型的,B原来的数据的最后一条是20350,那之前的数据不能发生改变,且新增的一条数据应该是从20350开始自增长。


  我之前的想法是在表中新增加一个字段,定义为IDENTITY,然后把需要变成自增长的列的数据更新到这个新增的自增长列当中,然后删除原来的列,并且重命名新增的列为原来的列的名字。但是实际操作当中在往新增列种更新数据时出错了。原因就是这个表本来就有数据,你新增一个自增长列的时候这个列就已经有数据了。当你 [SET IDENTITY_INSERT 表名 ON]的时候,你就只能往这个表插入数据,但是不能更新自增长列的数据,(如果sqlserver有IDENTITY_UPDATE就好了)。这样一来的话我无法保证之前那个需要设置自增长列的数据不会丢失了。
  后来,新增加一个表,与需要操作的表结构一模一样,但是设置ID列为自增长,然后[SET IDENTITY_INSERT 表名 ON],然后从另外一个表往新表拷贝数据,然后[SET IDENTITY_INSERT 表名 OFF],然后Drop原来的表,最后改表名为原来的表名就好了。

需要注意的地方:
往新表拷贝数据的时候需要写上字段名
insert into 新表名(C1,C2......) select * from 旧表名;
更改表名
EXEC sp_rename '新表名','旧表名';

最后可以把整个过程写成一个存储过程或许当每步都测试好之后结合在一起当SQL运行。
 

你可能感兴趣的:(数据结构,sql)