在SQL Server 2008中向下移动标识列值

时间:2014-06-30 07:37:12

标签: sql-server-2008

我对使用此结构的表有疑问

ID  Name       Code
-------------------
2   Counter 1  1001
3   Counter 2  1002
4   Counter 3  1003

Ididentity列,是该表的主键。

现在我想进行更改并将ID转换为以下格式:

ID  Name       Code
--------------------
1   Counter 1  1001
2   Counter 2  1002
3   Counter 3  1003

用户数据非常重要,永远不会被更改

非常感谢

1 个答案:

答案 0 :(得分:0)

我完全同意@Damien_The_Unbeliever。但是,如果您仍想转移值,请尝试以下脚本。

     SET IDENTITY_INSERT tablename ON;

    ;WITH CTE AS
    (
        SELECT ROW_NUMBER() OVER(ORDER BY ID ASC) NewID
        FROM TableName
    )
    UPDATE CTE 
    SET ID = NewID

    SET IDENTITY_INSERT tablename OFF; 

    DECLARE @SeedValue INT = (SELECT COUNT(*) FROM TableName);

    DBCC CHECKIDENT ("TableName", RESEED, @SeedValue);
    GO

DBCC CHECKIDENT 会将IDENTITY种子值重置为总数。表中存在的行,因此下次当您插入新行时,它将为IDENTITY列生成下一个连续值。