sql >> Databasteknik >  >> RDS >> Sqlserver

Hur lägger man till identitet till kolumnen i SQL Server?

Du kan inte lägg till IDENTITY till en befintlig kolumn. Det går bara inte att göra.

Du måste skapa en ny kolumn av typen INT IDENTITY och släpp sedan den gamla kolumnen du inte längre behöver (och byt eventuellt namn på den nya kolumnen till det gamla namnet - om det behövs)

Dessutom:Jag skulle inte gör detta i den visuella designern - detta kommer att försöka återskapa tabellen med den nya strukturen, kopiera över all data (alla 10 miljoner rader), och släpp sedan den gamla tabellen.

Det är mycket effektivare att använda raka T-SQL-satser - detta kommer att göra en "på plats" uppdatering, icke-förstörande (ingen data går förlorad), och det gör det inte måste kopiera cirka 10 miljoner rader i processen...

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

När du lägger till en ny kolumn av typen INT IDENTITY till ditt bord, då kommer det automatiskt att fyllas med på varandra följande nummer. Du kan inte stoppa detta från att hända, och du kan inte heller uppdatera värdena senare.

Inget av dessa alternativ är egentligen särskilt användbart, i slutändan - du kan sluta med olika ID-värden... för att göra detta rätt, måste du:

  • skapa den nya tabellen i förväg, med rätt struktur och IDENTITY redan på plats
  • aktivera sedan SET IDENTITY_INSERT (yourtable) ON på den tabellen för att tillåta att värden infogas i identitetskolumnen
  • kopiera denna data från den ursprungliga källan
  • stänga av identitetsinfogning igen:SET IDENTITY_INSERT (yourtable) OFF

Endast med detta tillvägagångssätt kommer du att kunna få samma ID i en IDENTITY-kolumn i din nya tabell.



  1. Varchar-data visar resultat selektivt

  2. PLSql-returvärden

  3. Välj tills rad matchar i postgresql?

  4. Använder row_to_json() med kapslade kopplingar