2008-11-04 6 views

Antwort

13

Sie erhalten einen Überlauffehler, wenn der Maximalwert erreicht ist. Wenn Sie den Bigint-Datentyp mit einem maximalen Wert 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. 

(Source)

Soweit ich weiß, MS SQL keine Funktionalität bietet die Identität Lücken zu füllen, so müssen Sie entweder zu Tun Sie dies selbst oder ändern Sie den Datentyp der Identitätsspalte.

Zusätzlich können Sie den Startwert auf die kleinste negative Zahl setzen, um einen noch größeren Wertebereich zu erhalten.

Here is a good blog post about this topic.

1

Es füllt nicht die Lücken. Stattdessen werden Einfügungen fehlschlagen, bis Sie die Definition der Spalte ändern, um entweder die Identität zu löschen und eine andere Möglichkeit zum Füllen der Lücken zu finden oder die Größe zu erhöhen (von int zu bigint) oder den Typ der Daten zu ändern (von int zu dezimal)), so dass mehr Identitätswerte verfügbar sind.

0

Wenn die Identitätsspalte eine Ganzzahl ist, beträgt Ihre maximale Anzahl 2.147.483.647. Wenn Sie es überschreiten, erhalten Sie einen Überlauffehler.

Wenn Sie denken, dass dies ein Risiko ist, verwenden Sie einfach den BIGINT-Datentyp, der Ihnen bis zu 9,223,372,036,854,775,807 ergibt. Ich kann mir eine Datenbanktabelle mit so vielen Zeilen nicht vorstellen.

Weitere Diskussion here. (Gleicher Link wie xsl erwähnt).

1

Sie können keine neuen Zeilen einfügen und erhalten die oben aufgeführte Fehlermeldung, bis Sie das Problem behoben haben. Sie können dies auf verschiedene Arten tun. Wenn Sie noch Daten haben und alle IDs unter dem Maximum verwenden, müssen Sie den Datentyp ändern. Wenn die Daten regelmäßig gelöscht werden und Sie eine große Lücke haben, die nicht verwendet wird, können Sie die Identitätsnummer auf die niedrigste Nummer in dieser Lücke umstellen. Zum Beispiel haben wir bei einem früheren Job Transaktionen protokolliert. Wir hatten vielleicht 40-50 Millionen pro Monat, aber wir reinigten alles, was älter als 6 Monate war, also würde alle paar Jahre die Identität fast 2 Milliarden erreichen, aber wir hätten nichts mit einer ID unter 1,5 Milliarden, also würden wir sezieren zurück zu 0. Wieder ist es möglich, dass keiner von beiden für Sie funktioniert und Sie müssen eine andere Lösung finden.

0

Für den Fall, dass Sie die maximale Anzahl für Ihre Identitätsspalte erreichen, können Sie die Daten aus dieser Tabelle in eine sekundäre Tabelle mit einem größeren Identitätsspalteyp verschieben und den Startwert für diesen neuen Identitätswert angeben Maximum des vorherigen Typs. Die neuen Identitätswerte werden ab diesem Zeitpunkt fortgesetzt.

0

Wenn Sie von Zeit zu Zeit "alte Werte" löschen, müssen Sie nur den Seed mit DBCC CHECKIDENT ('MyTable', RESEED, 0) zurücksetzen;

+0

DBCC CHECKIDENT ('MyTable', RESEED, -2147483647) könnte möglicherweise helfen, wenn Sie bereits Zeilen 0-2147483647 ausgefüllt haben;) – keithl8041

Verwandte Themen