现在的表已经有很多数据了,能不能在不影响数据的情况下修改主键ID列为自增列,现在该表还没自增列!

解决方案 »

  1.   

    --创建测试表
    CREATE TABLE t1(ID int IDENTITY,A int)
    GO
    --插入记录
    INSERT t1 VALUES(1)
    GO--1. 将IDENTITY(标识)列变为普通列
    ALTER TABLE t1 ADD ID_temp int
    GOUPDATE t1 SET ID_temp=ID
    ALTER TABLE t1 DROP COLUMN ID
    EXEC sp_rename N't1.ID_temp',N'ID',N'COLUMN'
    INSERT t1 VALUES(100,9)
    GO--2. 将普通列变为标识列
    CREATE TABLE t1_temp(ID int,A int IDENTITY)
    SET IDENTITY_INSERT t1_temp ON
    INSERT t1_temp(ID,A) SELECT * FROM t1
    SET IDENTITY_INSERT t1_temp OFF
    DROP TABLE T1
    GOEXEC sp_rename N't1_temp',N't1'
    INSERT t1 VALUES(109999)
    GO--显示处理结果
    SELECT * FROM t1
    /*--结果:
    ID          A 
    ----------------- ----------- 
    1           1
    100         9
    109999      10
    --*/
      

  2.   

    先判断ID有没有重复的:
    select id from tems group by id  having count(id)>1
    如果没有,直接用企业管理器进行修改。
      

  3.   

    这是可以的,改后,自增ID会根据表中有的最大值+1作为下一条记录到来时的新值.通过企业管理器或dbcc命令都可以修改的.
      

  4.   

    個人認為現在去改主鍵自增不可取,就算你想讓ID自增,也可以想個其他的辦法,而不是中途去改
    你可以建一個表T,里面存放所有表的MAXID,再寫個存儲過程,當新增行的時候,去表T里抓MAXID+1,那樣就可以實現自增了啊,又不會對以前的數據造成任何影響