添加标识列 - ID的顺序

时间:2016-01-15 23:17:07

标签: sql sql-server

请参阅下面的DDL:

create table #test (name varchar(10),dateofbirth datetime)

insert into #test values ('ian', '1976-09-08')
insert into #test values ('maria', '1976-09-08')

我意识到没有主键是一个糟糕的设计选择。我想添加一个新的标识列,如下所示:

alter table #test add id int identity

这正如我所料,即Ian的ID为1,Maria的ID为2。

此表中有1000万行。我可以假设ID订单会尊重他们输入表格的顺序吗?例如首先输入Ian,因此他的ID为1.安妮是输入的第一百万行,因此ID为1,000,000。

1 个答案:

答案 0 :(得分:2)

未定义IDENTITY值分配给现有行的顺序。使用堆示例,SQL Server可能会以用于存储行的文件/页面/槽的物理顺序分配值。如果这与插入顺序匹配,则只能通过偶然事件而不应依赖。空间分配和重用可能导致数据的物理顺序与原始插入顺序不同,因为数据库可能包含多个文件。

如果表具有聚簇索引,则可能会按聚簇索引键的顺序分配值,但同样不要指望它。关系数据库表在逻辑上是一组无序行,应始终如此处理。

如果您有一个增量列来派生插入顺序,则可以使用IDENTITY查询中的SELECT...INTO...ORDER BY函数创建一个新表,其中包含以所需顺序分配的标识值。前进插入的新行的标识值将按插入顺序递增。