sql >> Database >  >> RDS >> Sqlserver

Primaire sleutel resetten (int als identiteit)

De maximale waarde voor een bigint is 9.223.372.036.854.775.807 . Als je op een dag 8 cijfers had gehaald, had je nog steeds 10 dagen nodig om het maximum te halen. Dat is ongeveer 25 miljoen jaar.

Ervan uitgaande dat u de kolom nog steeds wilt resetten, is de eerste vraag die ik heb:is de volgorde van rijen belangrijk? Betekent dit dat u vertrouwt op het feit dat rij 1000 vóór 1100 komt voor, laten we zeggen, chronologische of anderszins absolute volgorde? Zo niet, dan is het eenvoudig:verwijder de kolom en voeg hem opnieuw toe. Hallo, nieuwe waarden.

Als je de volgorde wilt behouden, moet je dat wat voorzichtiger doen:

  1. Vergrendel de tafel;
  2. Wijzig het type zodat het niet langer automatisch wordt verhoogd;
  3. Maak een nieuwe kolom. Je kunt het beste ervoor zorgen dat het voorlopig geen indexen heeft, omdat het bijwerken van de index de invoegingen vertraagt;
  4. Vul de waarden in de tweede met een soort lus waarbij een teller wordt verhoogd (zoals de SQL Server rownum-truc) waarbij de inserts worden gerangschikt in de oorspronkelijke volgorde;
  5. Vervang de oude kolom door de nieuwe;
  6. Auto-increment en primaire sleutelstatus resetten.


  1. Kan het sorteerconflict tussen SQL_AltDiction_CP850_CI_AS en SQL_Latin1_General_CP1_CI_AS niet oplossen in de gelijk aan-bewerking

  2. kan geen verbinding maken met mysql op AWS RDS (fout 2003)

  3. PHP haalt gegevens op uit tabelrij en slaat op in variabele

  4. Welk gegevenstype voor het opslaan van afbeeldingen en documenten in SQL Server 2005