最简单的例子:我有下表:
create table test
( ID int identity (1,1) not null primary key,
text char(20) not null
)
我已经创建了3个值:
(1,a)
(2,b)
(3,c)
现在我删除了(2,b)
,我的行是(1,a)
和(3,c)
。
(1,a)
和(2,c)
? 答案 0 :(得分:1)
不,你不应该。有太多方法可能会变坏 - 假设您在另一个表中有相关记录2
作为外键 - 而不是孤立(并且很容易识别),它们将与另一个相关(不正确的)记录。
此外,IDENTITY
值通常用作聚簇索引(意味着它们决定了记录的物理存储位置)。如果您更改了该值,则必须对数据进行物理重新定位 - 不会伤害任何内容,但会导致不必要的I / O.
IDENTITY
值不保证连续,它们保证唯一。如果您需要连续数字,最好的方法是通过添加ROW_NUMBER
列在输出中导出数字:
SELECT
ROW_NUMBER() OVER (ORDER BY ID) RowNum,
ID,
text
FROM test
但请注意,如果中间的记录被删除(正如您猜测的那样)RowNum
将是不同的。因此,您无法从该值构建任何关系 - 您只需使用它来显示连续订购。