Gibt es ein Maximum? Wird SQL Server SqlExceptions auslösen, wenn das Maximum erreicht ist? Wie lösen Sie es? (Archivierung?)
Von den SQL Server-Ressourcen kann ich sehen, dass das Maximum 2,147,483,647 ist. Ich bin weit davon entfernt, aber ich war nur neugierig.
Das Maximum für eine int
ist tatsächlich 2.147.483.647.
Wenn Sie versuchen, die maximale Größe zu überschreiten, erhalten Sie diesen Fehler:
%Vor% Wenn das nicht groß genug ist, verwenden Sie bigint
(9,223,372,036,854,775,807)
Das Maximum wird durch den Datentyp definiert, nicht durch den Modifikator IDENTITY
. Für eine Spalte INT
haben Sie bereits das Maximum herausgefunden. Wenn Sie einen Datentyp mit einem größeren Bereich benötigen, ist BIGINT
die offensichtliche Wahl, und es kann sehr gut IDENTITY
markiert werden.
TINYINT
: 0 bis 255 SMALLINT
: -32768 bis 32767 INT
: -2147483648 bis 2147483647 BIGINT
: -9223372036854775808 bis 9223372036854775807 Ich würde erwarten, dass ein Fehler auftritt, wenn versucht wird, Zeilen einzufügen, nachdem das Maximum erreicht wurde, da die IDENTITY
-Implementierung immer noch versuchen würde, mit jeder Einfügung zu inkrementieren.
Während es sicherlich möglich wäre, Zeilen in einem anderen Datenspeicher zu archivieren und die Wiederverwendung von Bezeichnern zu starten ( DBCC CHECKIDENT (jobs, RESEED, 0)
setzt den Zähler zurück), bietet SQL Server dies nicht direkt an. Sie müssen die Logik dafür selbst implementieren, und Sie müssen darüber nachdenken, welche Art von Problemen die Wiederverwendung von Kennungen Ihrer Anwendung bringen könnte. Werden zum Beispiel bei einer Webanwendung alte URLs plötzlich auf neue Dokumente zeigen oder 404 Fehler zurückgeben?
Beachten Sie, dass Sie die ID zurücksetzen, wenn Sie die Tabelle abschneiden. Kann in Fällen hilfreich sein, in denen Sie die Tabelle nicht löschen und neu erstellen können.
Wenn Sie beispielsweise den Datentyp INT für Ihren Primärschlüssel verwenden möchten und bis zum Ende der Kapazität dieses Datentyps gegangen sind, müssen Sie Folgendes tun:
Führen Sie diese Abfrage in Ihrer Tabelle aus:
DBCC CHECKIDENT (Tabellenname, RESEED, 0)
Auf diese Weise wird Ihr Datensatz mit dem Primärschlüssel von 1 eingefügt.
Aber bedenken Sie, dass wenn Ihr PC 1000001 erreicht, ein Fehler auftritt, weil dieser Primärschlüssel in Ihrer Tabelle existiert. Mit anderen Worten, Sie müssen immer Ihren Primärschlüssel berücksichtigen.
Tags und Links sql-server