Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie füge ich der Spalte in SQL Server Identität hinzu?

Das können Sie nicht IDENTITY hinzufügen zu einer bestehenden Spalte. Es geht einfach nicht.

Sie müssen eine neue erstellen Spalte vom Typ INT IDENTITY und löschen Sie dann die alte Spalte, die Sie nicht mehr benötigen (und benennen Sie die neue Spalte möglicherweise in den alten Namen um - falls erforderlich)

Außerdem:würde ich nicht Tun Sie dies im visuellen Designer - dieser versucht, die Tabelle mit der neuen Struktur neu zu erstellen, kopieren Sie alle Daten (alle 10 Millionen Zeilen) und dann die alte Tabelle löschen.

Es ist viel effizienter, direkte T-SQL-Anweisungen zu verwenden - dies führt eine "In-Place"-Aktualisierung durch, nicht destruktiv (keine Daten gehen verloren) und nicht dabei etwa 10 Millionen Zeilen kopieren müssen...

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

Wenn Sie eine neue Spalte vom Typ INT IDENTITY hinzufügen zu Ihrer Tabelle, dann wird diese automatisch mit fortlaufenden Nummern belegt. Sie können dies nicht verhindern und die Werte später auch nicht aktualisieren.

Keine dieser Optionen ist am Ende wirklich sehr nützlich - Sie könnten mit unterschiedlichen ID-Werten enden ... um dies richtig zu machen, müssten Sie:

  • Erstellen Sie die neue Tabelle im Voraus, mit der richtigen Struktur und der IDENTITY bereits vorhanden
  • schalten Sie dann SET IDENTITY_INSERT (yourtable) ON ein in dieser Tabelle, damit Werte in die Identitätsspalte eingefügt werden können
  • kopieren Sie diese Daten von der ursprünglichen Quelle
  • Identitätseinfügung wieder ausschalten:SET IDENTITY_INSERT (yourtable) OFF

Nur mit diesem Ansatz können Sie dieselben IDs in einer IDENTITY-Spalte in Ihrer neuen Tabelle erhalten.