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

Comment ajouter une identité à la colonne dans SQL Server ?

Vous ne pouvez pas ajouter IDENTITY à une colonne existante. Cela ne peut tout simplement pas être fait.

Vous devrez créer un nouveau colonne de type INT IDENTITY puis supprimez l'ancienne colonne dont vous n'avez plus besoin (et renommez éventuellement la nouvelle colonne avec l'ancien nom - si nécessaire)

Aussi :Je ne le ferais pas faites-le dans le concepteur visuel - cela essaiera de recréer la table avec la nouvelle structure, copiez sur toutes les données (toutes les 10 millions de lignes), puis supprimez l'ancienne table.

Il est beaucoup plus efficace d'utiliser des instructions T-SQL directes - cela fera une mise à jour "sur place", non destructive (aucune donnée n'est perdue), et ne le fait pas besoin de copier environ 10 millions de lignes dans le processus...

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

Lorsque vous ajoutez une nouvelle colonne de type INT IDENTITY à votre table, elle sera automatiquement remplie de numéros consécutifs. Vous ne pouvez pas empêcher que cela se produise, et vous ne pouvez pas non plus mettre à jour les valeurs ultérieurement.

Aucune de ces options n'est vraiment très utile, en fin de compte - vous pourriez vous retrouver avec des valeurs d'ID différentes... pour faire cela correctement, vous devrez :

  • créez la nouvelle table à l'avance, avec la structure appropriée et l'IDENTITY déjà en place
  • puis activez SET IDENTITY_INSERT (yourtable) ON sur cette table pour permettre l'insertion de valeurs dans la colonne d'identité
  • copier ces données à partir de la source d'origine
  • désactiver à nouveau l'insertion d'identité :SET IDENTITY_INSERT (yourtable) OFF

Ce n'est qu'avec cette approche que vous pourrez obtenir les mêmes identifiants dans une colonne IDENTITY de votre nouvelle table.