sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan tilføjer man identitet til kolonnen i SQL Server?

Du kan ikke tilføj IDENTITY til en eksisterende kolonne. Det kan bare ikke lade sig gøre.

Du skal oprette en ny kolonne af typen INT IDENTITY og slip så den gamle kolonne, du ikke længere har brug for (og omdøb eventuelt den nye kolonne til det gamle navn - hvis det er nødvendigt)

Også:Jeg ville ikke gør dette i den visuelle designer - dette vil forsøge at genskabe tabellen med den nye struktur, kopiere over alle data (alle 10 millioner rækker), og slip derefter den gamle tabel.

Det er meget mere effektivt at bruge lige T-SQL-sætninger - dette vil gøre en "in-place" opdatering, ikke-destruktiv (ingen data går tabt), og det ikke skal kopiere omkring 10 millioner rækker i processen...

ALTER TABLE dbo.YourTable
  ADD NewID INT IDENTITY(1,1) NOT NULL

Når du tilføjer en ny kolonne af typen INT IDENTITY til dit bord, så vil det automatisk blive udfyldt med fortløbende tal. Du kan ikke forhindre dette i at ske, og du kan heller ikke opdatere værdierne senere.

Ingen af ​​disse muligheder er egentlig særlig nyttige i sidste ende - du kan ende med forskellige ID-værdier... for at gøre dette rigtigt, skal du:

  • opret den nye tabel i forvejen med den korrekte struktur og IDENTITY allerede på plads
  • Tænd derefter SET IDENTITY_INSERT (yourtable) ON på den tabel for at tillade værdier at blive indsat i identitetskolonnen
  • kopiér disse data fra den originale kilde
  • deaktiver identitetsindsættelse igen:SET IDENTITY_INSERT (yourtable) OFF

Kun med denne tilgang vil du være i stand til at få de samme ID'er i en IDENTITY-kolonne i din nye tabel.



  1. Hent alle rækker baseret på forespørgslen til en matrix

  2. Indsættelse af variabler MySQL ved hjælp af Python, fungerer ikke

  3. Hvordan opretter man tabeller med adgangskodefelter i mysql?

  4. Hvordan sporer man antallet af ændringer, der er sket i en kolonne? T-SQL - SQL Server