SQL中将某列改为自动增长类型

  如何在原ID列不是自动增长列设为 自动增长列,并保留原ID列数据的通用办法:

1 ) 建立 一中间表,只有Id 自增长类型,和一其他类型列?
Create   table  tz (ID counter,tmpI  integer )--Access
     Create   table tz (ID int identity ,tmpI int )--SQL Server

2 ) 获得原表的ID列的最大值,向中间表填入记录直到记录数大于原ID列的最大值
select   max (ID)  from  oldTable
insert   into  tz(  max (ID))

3 )将中间表与原表左连接,取中间表ID列,原表其他列,插入一临时表tmp
select  tz.id, MyTable.otherCol   into  tmp
from  tz  left   outer   join  MyTable  on  tz.id = MyTable.id

4 )因为自动增长列是从1开始,若有指向小于1的记录要特殊处理: ' 用原ID列中不存在(不连续的)项代替 '
select   *   from  tmp
update  tmp  set  parent = 17    where  parent = 0

5 ) 删除空余的行
delete   from  tmp  where  name  is   null

6 )删除原表,将临时表重命名为原表名
drop   table  MyTable   
EXEC    sp_rename   tmp,  MyTable

转载于:https://www.cnblogs.com/tulater/archive/2008/10/23/1318236.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值