2013-08-07 15 views
8

Ich habe etwas lustiges in meiner Datenbank erlebt. Der Primärschlüssel erhöht sich wie folgt:Identität Spalte Inkrement springen

1 
2 
3 
4 
5 
6 
7 
8 
1001 

Ich verwende EntityFramework oder manchmal LINQ to SQL.

+0

Fällt Ihr Einsatz irgendwann aus? –

+1

Wenn Sie SQL Server 2012 verwenden, handelt es sich um einen Fehler. –

+1

http://connect.microsoft.com/SQLServer/feedback/details/739013/alwayson-failover-results-in-reseed-ofidentity –

Antwort

4

Es passiert, wenn SQL Server 2012 seine vor-zugewiesenen Sequenznummern verliert.

Wenn Sie, dass loswerden wollen, ist eine Option TRACEFLAG verwenden:

DBCC TRACEON (272) 

Eine weitere Möglichkeit ist es, eine Sequenz zu verwenden (ohne Caching) statt Identität:

CREATE SEQUENCE MySeq AS int 
    START WITH 1 
    INCREMENT BY 1 
    NO CACHE; 

Siehe hierzu: http://www.big.info/2013/01/how-to-solve-sql-server-2012-identity.html

+0

Segne euch alle. Daumen hoch – ojorma

1

Das ist alles völlig normal. Microsoft hat Sequenzen in SQL Server 2012 hinzugefügt. Weitere Informationen finden Sie unter a link.

Wenn Sie das alte Verhalten haben möchten, können Sie:

Verwendung Trace-Flag 272 - das wird ein Protokolleintrag führen für jede generierte Identitätswert generiert werden. Die Leistung der Identitätsgenerierung kann durch Aktivieren dieses Ablaufverfolgungsflags beeinträchtigt werden. Verwenden Sie einen Sequenzgenerator mit der Einstellung NO CACHE (http://msdn.microsoft.com/en-us/library/ff878091.aspx)