2014-02-22 29 views
1

好了,所以我用這個代碼,以使表:的SQL Server自動遞增外出時隨機

CREATE TABLE Clients 
(
ID int IDENTITY(1,1) PRIMARY KEY, 
NAME varchar(20) NOT NULL, 
BALANCE int NOT NULL, 
) 

而且它的第幾次,之後的工作很好,當我將其添加給它像一個隨機的新紀錄ID:

The problem

我真的不知道是什麼問題,所以你可能會告訴我嗎?

回答

3

這完全正常。 Microsoft在SQL Server 2012中添加了sequences

默認情況下,當您創建SEQUENCE時,您可以提供CACHE大小。緩存用於通過最小化生成序列號所需的磁盤IO數來提高使用序列對象的應用程序的性能。

要解決此問題,您需要確保在序列創建/屬性中添加了NO CACHE選項。

CREATE SEQUENCE TEST_Sequence 
    AS INT 
    START WITH 1 
    INCREMENT BY 1 
    MINVALUE 0 
    NO MAXVALUE 
    NO CACHE 

Sequence number

  1. 使用跟蹤標誌272 - 這將導致生成 每個生成的標識值的日誌記錄。打開此跟蹤標誌可能會影響身份標識 的性能。
  2. 使用序列發生器與NO緩存設置 (http://msdn.microsoft.com/en-us/library/ff878091.aspx

Identity column value suddenly jumps to 1001 in sql server

+0

這是這樣一個奇怪的「功能」 - 感謝分享這個,我不知道這甚至會被認爲是從M $開發者的好主意 – Trent

+0

http://connect.microsoft.com/SQLServer/feedback/details/739013/alwayson-failover-results-in-reseed-of-identity緩存是原因,但AFAIK你不能'沒有CACHE'' IDENTITY'的值。但是對於它的價值,你應該期待'IDENTITY'值每次增加一步,但是你不能依賴它(緩存與否),因爲一個語句可能會使用一個標識值......只能被滾動回到現在生成的身份值在以太網中丟失。 –