ID 列按顺序中断 - 如何修复所有条目



>我有一个在 ID 列上没有 IDENTITY 或主键的表:

create table foo (id INT, name nvarchar(MAX));  
INSERT INTO foo VALUES (1, 'George Washington');  
INSERT INTO foo VALUES (2, 'John Adams');  
INSERT INTO foo VALUES (3, 'Thomas Jefferson');  
INSERT INTO foo VALUES (3, 'James Madison');  
INSERT INTO foo VALUES (4, 'James Monroe');  
INSERT INTO foo VALUES (5, 'John Quincy Adams');  

请注意,两个条目的 id 值为 3。如何修复所有必要值的 ID 列(除了使用手动 UPDATE 语句(?预期结果是 ID 列转到 1,2,3,4,5,6

使用 RowNumber。

            SELECT  id ,
                    NAME
            FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY id, name ) id,
                                name 
                      FROM      foo
                    ) T

结果:

    id      NAME
    ------  -------------------
    1       George Washington
    2       John Adams
    3       Thomas Jefferson
    4       James Madison
    5       James Monroe
    6       John Quincy Adams
    (6 row(s) affected)

相关内容

最新更新