我桌上有几千次跳跃。我已经找到了原因,而不是我会说,这是频繁的服务器故障并重新启动并执行set identity cache=off
。
希望这些大跳跃不会发生。现在我想在新条目的空白中重用这些数字,这样做的最佳方法是什么?正在改变种子价值是可能的吗?请注意,我无法更改任何现有数据。另外,请注意添加新条目的速度很慢(每天少于10个条目),我可以密切关注此数据库,并在必要时再次手动更改种子值。
非常感谢你。
您可以在脚本的开头和结尾使用SET IDENTITY INSERT table_name ON
和SET IDENTITY INSERT table_name OFF
为每个实例编写脚本。完整的文档是here。您一次只能在一张桌子上使用它。
更改种子将不起作用,因为将始终使用下一个最高值。
以下脚本将有助于识别差距。
SELECT TOP 1
id + 1
FROM mytable mo
WHERE NOT EXISTS
(
SELECT NULL
FROM mytable mi
WHERE mi.id = mo.id + 1
)
ORDER BY
id
这是来自这个question/answer
UPDATE
一种可能的策略是使数据库脱机,使用SET IDENTITY INSERT
用所需的ID填充间隙/跳转,否则使用最小/空数据然后重新生成。然后使用空记录直到全部使用,然后恢复到以前的方法。
我不认为这些数字对用户很重要。但是您可以考虑进行一次批量操作来修复它们。不要试图插入它们之间
为表的表级更改结构设置标识插入,并且它不是事务安全的。
您需要编写TSQL脚本以同时更改基表和从属表