sql >> Database >  >> RDS >> Sqlserver

Hoe identiteit toevoegen aan de kolom in SQL Server?

Je kan niet voeg IDENTITY toe naar een bestaande kolom. Het kan gewoon niet.

U moet een nieuwe . maken kolom van het type INT IDENTITY en laat dan de oude kolom vallen die je niet meer nodig hebt (en hernoem eventueel de nieuwe kolom naar de oude naam - als dat nodig is)

Ook:ik zou niet doe dit in de visuele ontwerper - dit zal proberen de tabel opnieuw te maken met de nieuwe structuur, kopieer over alle gegevens (alle 10 miljoen rijen), en laat dan de oude tabel vallen.

Het is veel efficiënter om rechte T-SQL-statements te gebruiken - dit zal een "in-place" update uitvoeren, niet-destructief (er gaan geen gegevens verloren), en niet moet ongeveer 10 miljoen rijen kopiëren in het proces...

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

Wanneer u een nieuwe kolom van het type INT IDENTITY toevoegt aan uw tafel, dan wordt deze automatisch gevuld met opeenvolgende nummers. U kunt dit niet voorkomen en u kunt de waarden ook niet later bijwerken.

Geen van beide opties is uiteindelijk echt nuttig - je zou kunnen eindigen met verschillende ID-waarden.... om dit goed te doen, zou je het volgende moeten doen:

  • maak de nieuwe tabel van tevoren, met de juiste structuur en de IDENTITY al aanwezig
  • zet vervolgens SET IDENTITY_INSERT (yourtable) ON in die tabel zodat waarden in de identiteitskolom kunnen worden ingevoegd
  • kopieer deze gegevens van de originele bron
  • identiteitsinvoer weer uitschakelen:SET IDENTITY_INSERT (yourtable) OFF

Alleen met deze aanpak kun je dezelfde ID's krijgen in een IDENTITY-kolom in je nieuwe tabel.



  1. Doe mee voor een Microsoft Access met SQL Server Academy-sessie

  2. Kan een opgeslagen Oracle-procedure niet aanroepen vanuit SSRS-rapportbuilder 3.0

  3. JDBC MySql-verbindingspoolingpraktijken om een ​​uitgeputte verbindingspool te voorkomen

  4. Oproepen activeren in cascade-verwijdering