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

时间:2017-06-19 02:57:01

标签: sql-server

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

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

1 个答案:

答案 0 :(得分:1)

使用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)