---自動增加跳至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