Frage

Was passiert, wenn SQL Server 2005 passieren das Maximum für eine IDENTITY-Spalte erreichen? Ist es von Anfang an beginnen und die Lücke Nachfüllen?

Was ist das Verhalten von SQL Server 2005, wenn es passiert?

War es hilfreich?

Lösung

Sie erhalten einen Überlauf-Fehler, wenn der Maximalwert erreicht ist . Wenn Sie den bigint-Datentyp mit einem Maximalwert von 9,223,372,036,854,775,807 verwenden wird dies höchstwahrscheinlich nie der Fall sein.

Die Fehlermeldung, die Sie erhalten, wird wie folgt aussehen:

Msg 220, Level 16, State 2, Line 10
Arithmetic overflow error for data type tinyint, value = 256.

(Quelle)

Soweit ich weiß, MS SQL keine Funktionalität bietet die Identität Lücken zu füllen, so müssen Sie entweder diese selbst tun oder den Datentyp des Identitätsspalts ändern.

Zusätzlich dazu Sie den Startwert auf die kleinste negative Zahl gesetzt, einen noch größeren Bereich von Werten zu erhalten zu verwenden.

Hier ist eine gute Blog-Post zu diesem Thema .

Andere Tipps

Es wird nicht in die Lücken füllen. Stattdessen fügt schlagen fehl, bis Sie die Definition der Spalte ändern entweder die Identität fallen und eine andere Art und Weise zu füllen die Lücken finden oder die Größe erhöhen (gehen von int nach bigint) oder die Art der Daten ändern (von int dezimal so), dass mehr Identitätswerte zur Verfügung.

Sie werden nicht in der Lage sein, neue Zeilen einfügen und die oben aufgeführten Fehlermeldung erhalten, bis Sie das Problem beheben. Sie können dies eine Reihe von Möglichkeiten tun. Wenn Sie noch Daten und verwenden alle IDs unterhalb der max, werden Sie den Datentyp ändern. Wenn die Daten in regelmäßigen Abständen gereinigt zu werden und Sie haben eine große Lücke, die nicht verwendet werden soll, können Sie die Identitätsnummer auf die niedrigste Zahl in dieser Lücke reseed. Zum Beispiel bei einer früheren Arbeit wurden Protokollierung wir Transaktionen. Wir hatten vielleicht 40 bis 50.000.000 pro Monat, aber wir waren alles älter als 6 Monate Spülen, so alle paar Jahre, die Identität Milliarden, nahe zu kommen 2 würde, aber wir würden unter 1,5 Milliarden nichts mit einer ID haben, so würden wir reseed wieder auf 0. Auch hier ist es möglich, dass keiner von diesen für Sie arbeiten und Sie werden eine andere Lösung finden müssen.

Wenn die Identitätsspalte ein Integer ist, dann ist Ihre max 2147483647. Sie werden einen Überlauffehler, wenn Sie es nicht überschreiten.

Wenn Sie denken, das ein Risiko ist, benutzen Sie einfach den BIGINT-Datentyp, mit dem Sie bis zu 9.223.372.036.854.775.807 gibt. Kann nicht eine Datenbanktabelle mit, dass viele Zeilen vorstellen.

Eine weitere Diskussion hier . (Gleicher Link als xsl erwähnt).

Für den Fall, dass Sie die maximale Anzahl für Sie Identitätsspalt tun treffen, können Sie die Daten aus dieser Tabelle in eine Sekundärtabelle mit einem größeren Identität Spaltentyp bewegen und den Startwert angeben, für den neuen Identitätswert das Maximum zu sein des vorhergehenden Typs. Die neuen Identitätswerte von diesem Punkt fortsetzen werden.

Wenn Sie „alten Werte“ von Zeit zu Zeit löschen müssen Sie nur den Samen zurückgesetzt werden DBCC CHECK ( 'MyTable', RESEED, 0);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top