sql >> Database >  >> RDS >> Sqlserver

Waarom zijn er hiaten in mijn IDENTITY-kolomwaarden?

De identiteitseigenschap in een kolom garandeert niet het volgende :

Uniek van de waarde – Uniciteit moet worden afgedwongen door gebruik te maken van een PRIMARY KEY of UNIQUE constraint of UNIQUE index.

Opeenvolgende waarden binnen een transactie – Het is niet gegarandeerd dat een transactie waarbij meerdere rijen worden ingevoegd, opeenvolgende waarden voor de rijen krijgt, omdat andere gelijktijdige invoegingen in de tabel kunnen voorkomen. Als waarden opeenvolgend moeten zijn, moet de transactie een exclusief slot op de tafel gebruiken of het SERIALIZABLE-isolatieniveau gebruiken.

Opeenvolgende waarden na herstart van de server of andere fouten –SQL Server kan identiteitswaarden cachen om prestatieredenen en sommige van de toegewezen waarden kunnen verloren gaan tijdens een databasefout of het opnieuw opstarten van de server. Dit kan resulteren in hiaten in de identiteitswaarde bij het invoegen. Als hiaten niet acceptabel zijn, moet de applicatie een sequentiegenerator gebruiken met de NOCACHE-optie of een eigen mechanisme gebruiken om sleutelwaarden te genereren.

Hergebruik van waarden – Voor een bepaalde identiteitseigenschap met specifieke seed/increment worden de identiteitswaarden niet opnieuw gebruikt door de engine. Als een bepaalde insert-instructie mislukt of als de insert-instructie wordt teruggedraaid, gaan de verbruikte identiteitswaarden verloren en worden ze niet opnieuw gegenereerd. Dit kan resulteren in hiaten wanneer de volgende identiteitswaarden worden gegenereerd.

Ook

Als er een identiteitskolom bestaat voor een tabel met frequente verwijderingen, kunnen er hiaten optreden tussen identiteitswaarden. Gebruik de eigenschap IDENTITY niet als dit een probleem is. Echter, om er zeker van te zijn dat er geen lacunes zijn ontstaan ​​of om een ​​bestaande leemte op te vullen , evalueer de bestaande identiteitswaarden voordat u er expliciet een invoert met SET IDENTITY_INSERT ON .

Controleer ook de eigenschappen van de identiteitskolom en controleer de waarde voor identiteitstoename. Het moet 1 zijn.



  1. PostgreSQL, SELECTEER van max id

  2. Hoe maak je een weergave in SQL

  3. Kopieer enkele kolommen van een csv-bestand naar een tabel

  4. ORA-12560:TNS:fout protocoladapter