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

Doppelte Werte in Identitätsspalte

Ich habe getestet, was Giogri sagt, und wenn Sie die Identitätsspezifikation (mindestens auf 2008, wahrscheinlich auch andere Versionen) aktivieren, nachdem die Tabelle Zeilen enthält, beginnt die DB mit der Nummerierung beim höchsten ganzzahligen Wert. Wenn Sie eine Zeile mit 100 als Spaltenwert haben, dann aktivieren Sie Identität, die nächste Einfügung ist 101. Selbst wenn Identitäts-Startwert als 1 angegeben ist. War nicht das, was ich erwartet hätte, aber es ist passiert.

Zusätzlich zu SET IDENTITY INSERT , gibt es auch einen Reseed-Befehl. DBCC CHECKIDENT Befehl, der Ihre Identitätswerte auf das zurücksetzt, was Sie angeben.

Da die Aktivierung der Identitätsspezifikation tatsächlich bei der höchsten Ganzzahl in der Spalte beginnt, hat wahrscheinlich jemand entweder SET IDENTITY_INSERT verwendet oder einen DBCC CHECKIDENT durchgeführt haben .

Der schnellste Weg zur Neusequenzierung, wie Andomar sagt, besteht darin, die Spalte wie folgt zu löschen/neu zu erstellen

ALTER TABLE tbl
DROP COLUMN ident_column
GO
alter TABLE tbl
ADD ident_column int IDENTITY

SET IDENTITY_INSERT Dokumente:http://msdn.microsoft.com/ de-us/library/aa259221(SQL.80).aspx
DBCC CHECKIDENT Dokumente:http://msdn.microsoft.com/ de-us/library/aa258817(SQL.80).aspx