是否有一种方法可以确保SQL Server标识列的值始终按顺序一致,即使在多次服务器重新启动之后也是如此



我一直面临着身份列在服务器重新启动后跳跃的挑战,例如,它会从1、2、3、4开始计数,然后跳到108109110,然后再跳到10001、10002、10003。

我现在正在通过触发器手动管理ID,但这是一项昂贵的加班工作。

在表级别上避免标识缓存的一个选项是使用序列(与no cache一起(而不是标识。

create sequence dbo.YourTableId as int minvalue 1 start with 1 increment by 1 no cache;
GO
create table dbo.YourTable
(
Id int not null constraint DF_YourTable_Id default (next value for dbo.YourTableId),
[Name] varchar(50) not null,
...

CREATE SEQUENCE(Transact-SQL(

警告:将序列设置为no cache可能会影响插入性能。

要找到折衷方案,可以将缓存大小设置为小于默认值的数字。例如,使用cache 10而不是no cache

这里还有更多。

最新更新