2008-11-04 13 views

Odpowiedz

35

Odpowiedź Joela jest poprawna, jest górną granicą dowolnego typu danych, którego używasz.

Oto przykład dwóch z nich:

  • int: 2^31-1 (2.147.483.647)
  • bigint: 2^63-1 (9.223.372.036.854.775.807)

mam faktycznie osiągnąłem limit w pracy, w której pracowałem. Rzeczywista błędu:

 
    Msg 8115, Level 16, State 1, Line 1 
    Arithmetic overflow error converting IDENTITY to data type int. 
    Arithmetic overflow occurred. 

Istnieje kilka poprawek do tego mogę myśleć poza czubek głowy. Numer 1 jest prawdopodobnie bardzo trudny i mało prawdopodobny, numer 2 jest łatwy, ale prawdopodobnie spowoduje problemy w bazie kodu.

  1. Jeśli kolumna tożsamości nie ma dla ciebie znaczenia (nie jest to klucz obcy itp.), Możesz po prostu ponownie ustawić bazę danych i zresetować kolumnę tożsamości.
  2. Zmień kolumnę tożsamości na większą. Jeśli na przykład przepełniłeś int, zmień kolumnę tożsamości na dużą wartość int. Powodzenia przepełniają to :)

Prawdopodobnie istnieją inne poprawki, ale nie ma łatwej magicznej kuli. Mam tylko nadzieję, że tak się nie stanie w tabeli, która jest centrum wielu związków, bo jeśli tak, to odczuwasz duży ból. To nie jest trudne, tylko nudne i długie.

4

To zależy od typu danych. Jeśli używasz Biginta, prawdopodobnie nigdy się nie przepełnisz. Nawet normalna int daje ci kilka miliardów wierszy. Nigdy się nie przelewałem, więc nie mogę powiedzieć, co się stanie, jeśli to zrobisz.

+0

Używam int (11), jak o tym? ile dat danych?i co się stało, jeśli przepełnił się auto_increment? –

0

Typy danych Opisy:

BIGINT Integer data from -2^63 through 2^63 - 1 

INT  Integer data from -2^31 through 2^31 - 1 

SMALLINT Integer data from -2^15 through 2^15 - 1 

TINYINT Integer data from 0  through 255 

Po dotarciu do górnej granicy AutoIncrement idzie do dolnej granicy.

2

Powiem ci, co się stanie ... moje dane przestały wstawiać się do tej konkretnej tabeli. Baza danych nadal działa, ale znalazłem brakujące dane i niespójność. Przy odrobinie badań znalazłem tabelę błędów, a następnie uruchomiłem ręczną wstawkę. Błąd jest taki sam jak powyżej.

Musiał zmienić kolumnę na BIGINT. W bazie danych 26 GB na nieco powolnym serwerze trwało około 30 minut. W archiwalnej wersji bazy danych (około 150 GB) zajęło to trochę więcej czasu.

Na szczęście nie było zbyt wielu związków na tym stole, więc ból był niewielki.

1

DBCC CHECKIDENT (SomeTable, RESEED, 1)

ten resetuje tożsamość 1 w tabeli 'SomeTable'

Nie wiem, czy jest to najlepszy sposób, aby to zrobić.

Powiązane problemy