---自动增长跳至1001 https://stackoverflow.com/questions/17587094/identity-column-value-suddenly-jumps-to-1001-in-sql-server --1. 使用序列 (Sequence) https://docs.microsoft.com/zh-cn/sql/t-sql/statements/create-sequence-transact-sql?view=sql-server-ver15 --2. 为SQL Server 注册启动参数 -t272 IF EXISTS(SELECT * FROM sys.sequences WHERE name = N'Id_Sequence') DROP SEQUENCE Id_Sequence; GO CREATE SEQUENCE Id_Sequence AS INT START WITH 1 --从1开始计数 INCREMENT BY 1 -- 每次加几个 MINVALUE 0 --最小值 NO MAXVALUE --没有最大值 CACHE 10 --设置缓存cache个序列 GO /* START WITH <constant> 序列对象返回的第一个值。 START 值必须小于或等于序列对象的最大值并大于或等于其最小值。 新序列对象的默认起始值是升序序列对象的最小值和降序序列对象的最大值。 INCREMENT BY <constant> 每次调用 NEXT VALUE FOR 函数时序列对象值递增(如果为负数,则为递减)的值。 如果增量是负值,则序列对象为降序,否则为升序。 增量不能为 0。 新序列对象的默认增量为 1。 [ MINVALUE <constant> | NO MINVALUE ] 指定序列对象的边界。 一个新序列对象的默认最小值是该序列对象的数据类型的最小值。 对于 tinyint 数据类型,此值为零,对于所有其他数据类型则为负数。 [ MAXVALUE <constant> | NO MAXVALUE 指定序列对象的边界。 一个新序列对象的默认最大值是该序列对象的数据类型的最大值。 [ CYCLE | NO CYCLE ] 此属性指定当超过序列对象的最小值或最大值时,序列对象是应从最小值(对于降序序列对象,则为最大值)重新开始,还是应引发异常。 新序列对象的默认循环选项是 NO CYCLE。 [ CACHE [<constant> ] | NO CACHE ] 通过最大限度地减少生成序列编号所需的磁盘 IO 数,可以提高使用序列对象的应用程序的性能。 默认值为 CACHE。 例如,如果选择的缓存大小为 50,SQL Server 并不会缓存 50 个单个值。 它只是缓存当前值和缓存中保留的值数。 这意味着,存储缓存所需的内存量始终为序列对象的数据类型的两个实例。 */ DROP table DuInvoiceReceipts go CREATE TABLE DuInvoiceReceipts ( Duid INT PRIMARY KEY DEFAULT (NEXT VALUE FOR Id_Sequence), orderId INT NOT NULL, isLate BIT NOT NULL, receiptDate Datetime NOT NULL, note NVARCHAR(100) ); go insert into DuInvoiceReceipts(orderId,isLate,receiptDate,note) SELECT 2,1,getdate(),N'geovindu' union SELECT 3,1,getdate(),N'涂聚文' union SELECT 4,1,getdate(),N'geovin' union SELECT 5,1,getdate(),N'du' union SELECT 6,0,getdate(),N'涂年生' union SELECT 7,1,getdate(),N'江西' union SELECT 8,1,getdate(),N'塗聚文(Geovin Du)' union SELECT 9,1,getdate(),N'井岗山' go select * from DuInvoiceReceipts go -- SELECT * FROM sys.sequences WHERE name = 'Id_Sequence' ; go --查询一下个值 SELECT NEXT VALUE FOR Id_Sequence go