我一直面临着身份列在服务器重新启动后跳跃的挑战,例如,它会从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
。
这里还有更多。