我有一个没有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
答案 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)