2008-11-04 8 views

Odpowiedz

13

Otrzymasz błąd przepełnienia, gdy zostanie osiągnięta maksymalna wartość. Jeśli użyjesz biginta typu danych o maksymalnej wartości 9,223,372,036,854,775,807, najprawdopodobniej tak się nie stanie.

Komunikat o błędzie dostaniesz będzie wyglądać następująco:

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

(Source)

O ile wiem, MS SQL nie zapewnia funkcjonalność, aby wypełnić luki tożsamości, więc trzeba albo Zrób to sam lub zmień typ danych kolumny tożsamości.

Oprócz tego można ustawić wartość początkową na najmniejszą liczbę ujemną, aby uzyskać jeszcze większy zakres wartości do użycia.

Here is a good blog post about this topic.

1

Nie spowoduje to wypełnienia luk. Zamiast tego wstawianie zakończy się niepowodzeniem, dopóki nie zmienisz definicji kolumny, aby zrzucić tożsamość i znaleźć inny sposób wypełnienia luk lub zwiększyć rozmiar (przejść od int do bigint) lub zmienić typ danych (z int na dziesiętny).), aby uzyskać więcej wartości tożsamości.

0

Jeśli kolumna tożsamości ma wartość Integer, oznacza to, że wartość maksymalna wynosi 2 147 483 647. Otrzymasz błąd przepełnienia, jeśli go przekroczysz.

Jeśli uważasz, że to ryzyko, po prostu użyj typu danych BIGINT, który daje do 9 223 372 036 854 775 807. Nie można sobie wyobrazić tabeli bazy danych z tak wieloma wierszami.

Dalsza dyskusja here. (Ten sam link, jak wspomniano xsl).

1

Nie będzie można wstawić nowych wierszy i zostanie wyświetlony komunikat o błędzie wymieniony powyżej, dopóki nie rozwiążesz problemu. Możesz to zrobić na kilka sposobów. Jeśli nadal masz dane i używasz wszystkich identyfikatorów poniżej maks., Musisz zmienić typ danych. Jeśli dane są regularnie czyszczone i masz dużą lukę, która nie zostanie wykorzystana, możesz ponownie ustawić numer tożsamości na najniższy numer w tej luce. Na przykład podczas poprzedniej pracy rejestrowaliśmy transakcje. Mieliśmy może 40-50 milionów miesięcznie, ale oczyszczaliśmy wszystko starsze niż 6 miesięcy, więc co kilka lat tożsamość zbliżyłaby się do 2 miliardów, ale nie mielibyśmy nic z identyfikatorem poniżej 1,5 miliarda, więc chcielibyśmy z powrotem do 0. Ponownie możliwe jest, że żadne z nich nie zadziała dla ciebie i będziesz musiał znaleźć inne rozwiązanie.

0

Jeśli trafisz maksymalną liczbę dla Twojej kolumny tożsamości, możesz przenieść dane z tej tabeli do dodatkowej tabeli o większym typie kolumny tożsamości i określić wartość początkową dla tej nowej wartości tożsamości, aby była maksymalna poprzedniego typu. Nowe wartości tożsamości będą kontynuowane od tego momentu.

0

Jeśli usuniesz "stare wartości" od czasu do czasu, wystarczy zresetować materiał siewny za pomocą DBCC CHECKIDENT ("MyTable", RESEED, 0);

+0

DBCC CHECKIDENT ("MyTable", RESEED, -2147483647) może pomóc, jeśli wypełniłeś już wiersze 0-2147483647;) – keithl8041

Powiązane problemy