6

Ich dachte, es ein Fehler war, aber nach der Lektüre dieses Artikels http://www.codeproject.com/Tips/668042/SQL-Server-2012-Auto-Identity-Column-Value-Jump-Is, fand ich, dass es 2012Wie die neue Identity Jump-Funktion von Microsoft SQL Server 2012 den Bereich des Datentyps behandelt?

Diese Funktion erhöht die letzten Identität Spaltenwert von 1000 (Ints) für neue Zeilen ein neues Feature von SQL Server ist (10000 für bigints) automatisch.

enter image description here

Ich versuche immer noch die Lösung in dem Artikel aber ich habe kein Problem, wenn dieser Sprung auf Client-Seite geschieht. Weil ich Hash-Version der IDs zum Client zeige. Es ist seine eigene Forderung, nicht meine.

Aber ich frage mich, was passiert, wenn die Werte dieser Identitätsspalten mehr als den Bereich des Datentyps (Int oder Bigint) geht? Wie behandelt es die Reichweite und Größe der Säule?

+2

Die Lösung in dem Artikel ist sehr einfach und dauert 5 min. Ich habe * -t272 * Lösung angewendet und es funktioniert gut. –

Antwort

4

Existierende Identitätsspalten werden mit "Server fehlschlagen: Msg 8115, Ebene 16, Status 1, Zeile 2 Arithmetischer Überlauffehler, der IDENTITY in Datentyp int konvertiert. Arithmetischer Überlauf ist aufgetreten." Siehe http://www.sql-server-performance.com/2006/identity-integer-scope/ zur Diskussion.

Es gibt keinen Grund zu vermuten, dass Identity Jump ein anderes Verhalten haben wird. Ich würde nicht wollen, dass es in einer früheren Sequenz nach ungenutzten Identitäten sucht.

+0

Danke, dass Link und http://stackoverflow.com/questions/13132939/what-happens-when-i-exhaust-a-bigint-generated-key-how-to-handle-it löscht die Verwirrung.Obwohl es ein mysql ist Frage, aber es macht einen Punkt. Wenn ich die Werte inkrementell beginnend von Null hinzufügen, dann wird es 300 Millionen Jahre und 67.108.863 Terabyte an freiem Speicherplatz dauern. Weil der maximale bigint 9223372036854775807 ist.At 1000 Einsätze/Sekunde das ist 106751991167 Tage wert. Fast 300 Millionen Jahre wie von @ CraigRinger erklärt. Das einzige Problem ist, wenn Sie die maximale Grenze einfügen.Aber wie Ihr Artikel sagte, wird das den Fehler auslösen. –

2

Warum Sie Sequenz in MS Server nicht 2012.

Beispielcode für Sequenz wird wie folgt verwenden und Sie nicht ADMIN Erlaubnis brauchen, um Sequenz zu erstellen.

CREATE SEQUENCE SerialNumber AS BIGINT 
START WITH 1 
INCREMENT BY 1 
MINVALUE 1 
MAXVALUE 9999999 
CYCLE; 
GO 

Im Fall, wenn Sie benötigen die führenden ‚0‘ hinzuzufügen dann einfach zu Sequenzieren tut es mit folgendem Code:

RIGHT ('0000' + CAST (NEXT VALUE FOR SerialNumber AS VARCHAR(5)), 4) AS SerialNumber 
-7

Das Problem in der neuesten Version des SQL Server-Updates behoben wurde. Es war ein Fehler.

Wenn Sie immer noch die gleiche Version verwenden möchten, müssen Sie Ihre Identität in Intervallen überprüfen und sie mit der aktuellen Identität neu erstellen, wenn sie über 1000s Wert gesprungen sind.

Dieses Skript kann Ihnen helfen, Seed-Werte, Increment Werte und aktuelle Identität Spalte Wert http://blog.sqlauthority.com/2014/08/29/sql-server-query-to-find-seed-values-increment-values-and-current-identity-column-value-of-the-table-with-max-value-of-datatype-part-2/

Mein Vorschlag zu wissen: Tragen Sie erneut gesendet Patches, CU oder Service Pack.

+4

Können Sie eine Verknüpfung zu einer Dokumentation zu diesem Fix herstellen? Ich sehe keine aktuellen Updates auf den Connect-Artikel hier https://connect.microsoft.com/SQLServer/feedback/details/739013/failover-or-restartresults-in-reseed-of-identity obwohl es sagt Das Problem mit dem Herunterfahren des Control Managers wird irgendwann gelöst. –

+5

Welches Problem genau behoben wurde, verstehe ich nicht. –