在SQL Server 2017中使用标识列空白

时间:2019-02-23 10:47:38

标签: sql sql-server primary-key uniqueidentifier sql-server-2017

我的桌子上跳了几千个。我已经弄清楚了原因,我想说晚了,这是服务器频繁故障并重新启动并执行的原因 set identity cache=off

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

非常感谢您。

2 个答案:

答案 0 :(得分: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的那个

更新

一种可能的策略是使数据库脱机,使用SET IDENTITY INSERT用所需的ID填充空白/跳转,否则使用最小/空数据填充,然后重新启用。然后使用空记录,直到所有记录都用完,然后恢复到以前的方法。

答案 1 :(得分:0)

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

在表级别的

和上设置身份插入会更改表的结构,因此不安全。

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