Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Valeurs en double dans la colonne d'identité

J'ai testé ce que dit Giogri et si vous activez la spécification d'identité (au moins sur 2008, probablement d'autres versions aussi) après que la table ait des lignes, la base de données commencera la numérotation à la valeur entière la plus élevée. Si vous avez une ligne avec 100 comme valeur de colonne, puis activez Identity, la prochaine insertion sera 101. Même avec Identity Seed spécifié comme 1. Ce n'était pas ce à quoi je m'attendais, mais c'est ce qui s'est passé.

En plus de SET IDENTITY INSERT , il existe également une commande de réamorçage. DBCC CHECKIDENT commande qui réinitialisera vos valeurs d'identité à ce que vous spécifiez.

Étant donné que l'activation de la spécification d'identité commence en fait à l'entier le plus élevé de la colonne, quelqu'un a probablement utilisé SET IDENTITY_INSERT ou fait un DBCC CHECKIDENT .

Le moyen le plus rapide de reséquencer comme le dit Andomar est de supprimer/recréer la colonne comme ceci

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

SET IDENTITY_INSERT docs :http://msdn.microsoft.com/ fr-fr/library/aa259221(SQL.80).aspx
DBCC CHECKIDENT documentation :http://msdn.microsoft.com/ fr-fr/library/aa258817(SQL.80).aspx