我只是想了解为什么会发生这种情况,而我的谷歌搜索失败了。我们使用的是 SQL Server 2016 SP1。
情况如下:供应商表通过跟踪每个表的当前值来管理 ID。如果您正在执行插入,则可以调用一个函数来返回一个 ID 块。
所以我们通过使用从真实表中选择来设置一个临时表select into
(我们正在克隆一组数据以使用不同的属性集重新插入)。
然后我们调用该函数并获取记录数的新 id(它只返回最大 ID,所以我们做一些数学运算来获取下一个 id)。
然后我们像这样更新表:
update #temp set @nextId = Id = @nextId + 1
期望它将为每条记录增加一并设置ID。
相反,为每 4 条记录设置相同的 ID,然后它会增加,接下来的 4 条获得下一个 id,等等。为什么每 4 条记录?什么地方出了错?
更有趣的是,如果我们在表上放置一个聚集索引,一切都会正常工作。
我确定这与表格堆有关......但不知道为什么。