Hvordan kan jeg tilbakestille identitetskolonnen i SQL Server?

Hvordan kan jeg tilbakestille identitetskolonnen i SQL Server?
I SQL Server refererer en identitetskolonne til en kolonne som automatisk genererer verdier basert på den medfølgende frøverdien og trinnintervallet.

Denne guiden vil lære deg hvordan du tilbakestiller en identitetskolonne i SQL Server, slik at du kan tilbakestille feilkonfigurerte verdier i en identitetskolonne.

SQL Server -identitet

For å legge til en identitetskolonne i en tabell i SQL Server, bruk identitetsspørsmålet. Syntaksen for identitetsspørsmålet i SQL Server er som vist:

Identitet (frø_value, inkrement_interval);

Identitetsspørsmålet godtar to argumenter:

  1. Seed_Value refererer til verdien av den første posten i tabellen.
  2. inkrement_interval - refererer til den spesifikke verdien til forrige post i tabellen.

Som standard er frø- og økningsverdiene satt til 1. Derfor har den første posten i tabellen en verdi på 1, og hver post lagt til tabellen, lagt til av 1.

Tilbakestill identitetskolonne i SQL Server

La oss nå lære å tilbakestille en identitetskolonne i SQL Server, og hvorfor du kanskje trenger å gjøre det.

Begynn med å opprette en eksempeltabell og sette inn data som vist i spørsmålene nedenfor:

Lag tabellbeholdning (
id int primær nøkkelidentitet (1,1) ikke null,
produktnavn varchar (255),
Pris int,
Mengde int
);
Sett inn i varelager (produktnavn, pris, mengde) verdier
('Smart Watch', 110.99, 5),
('MacBook Pro', 2500.00, 10),
('Winter Coats', 657.95, 2),
('Office Desk', 800.20, 7),
('Loddejern', 56.10, 3),
('Telefonstativ', 8.95, 8);

Vi kan nå spørre dataene som er lagret i tabellen som:

Velg * fra Inventory;

De resulterende postene er som vist:

Legg merke til ID -kolonnen; Selv om vi ikke spesifiserte verdiene i innsatserklæringen vår, starter identitetsfunksjonen automatisk generasjoner verdien som starter på 1 og fortsetter å øke med en 1 for hver post vi setter inn.

Hvorfor tilbakestille identitetskolonnen?

Du kan spørre om identitetskolonnen inneholder automatisk genererte verdier i en spesifisert logisk rekkefølge, hvorfor må jeg tilbakestille identitetskolonnen?

Se på hva som skjer med dataene når vi sletter en post fra tabellen:

Slett fra varelager der mengde = 7;

Ovennevnte eksempel bør fjerne en post der mengden er lik 7.

Bordet har nå postene som:

Velg * fra Inventory;

I ID -kolonnene har vi verdiene som starter fra 1 til 6. Imidlertid mangler IDen til 4. Dette skjer når vi slipper en plate fra bordet.

For å fikse dette, må vi tilbakestille identitetskolonnen.

Hvordan tilbakestille identitetskolonnen

For å tilbakestille identitetskolonnen i SQL Server, bruker vi DBCC CheckInDent -prosedyren.

Syntaksen til prosedyren er som:

Dbcc checkident ('tabell_name', reseed, new_value);

Imidlertid, hvis vi tilbakestiller identitetskolonnen og prøver å sette inn data, returnerer SQL Server en feil. For å løse dette:

  • Lag en ny bord som fungerer som sikkerhetskopi av det gamle bordet.
  • Fjern data fra den gamle tabellen
  • Tilbakestill identitetskolonnen
  • Innsatt dataene på nytt i den nye tabellen.

Et eksempel på at jeg implementerer trinnene ovenfor er som vist:

Velg * til New_Inventory fra Inventory;
Slett fra varelager;
DBCC Checkident ('Inventory', Reseed, 0);
Sett inn i varelager (produktnavn, pris, mengde) velg produktnavn, pris, mengde fra new_inventory ordre med ID ASC;

Når spørsmålene er utført med hell, kan vi sjekke dataene i varelager -tabellen som:

Velg * fra Inventory;

De resulterende tabellpostene er som vist:

Her er ID -kolonnen i riktig rekkefølge.

Lukking

Denne guiden dekker det grunnleggende om identitetsfunksjonen i SQL Server og hvordan du tilbakestiller en identitetskolonne i tilfelle feil.