在SQL Server 2017中使用标识列间隔

问题描述 投票:3回答:2

我桌上有几千次跳跃。我已经找到了原因,而不是我会说,这是频繁的服务器故障并重新启动并执行set identity cache=off

希望这些大跳跃不会发生。现在我想在新条目的空白中重用这些数字,这样做的最佳方法是什么?正在改变种子价值是可能的吗?请注意,我无法更改任何现有数据。另外,请注意添加新条目的速度很慢(每天少于10个条目),我可以密切关注此数据库,并在必要时再次手动更改种子值。

非常感谢你。

sql sql-server primary-key uniqueidentifier sql-server-2017
2个回答
1
投票

您可以在脚本的开头和结尾使用SET IDENTITY INSERT table_name ONSET 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填充间隙/跳转,否则使用最小/空数据然后重新生成。然后使用空记录直到全部使用,然后恢复到以前的方法。


0
投票

我不认为这些数字对用户很重要。但是您可以考虑进行一次批量操作来修复它们。不要试图插入它们之间

为表的表级更改结构设置标识插入,并且它不是事务安全的。

您需要编写TSQL脚本以同时更改基表和从属表

© www.soinside.com 2019 - 2024. All rights reserved.