web-dev-qa-db-fra.com

SQL Server: comment ajouter une nouvelle colonne d'identité et remplir une colonne avec des identifiants?

J'ai une table avec une énorme quantité de données. J'aimerais ajouter une colonne supplémentaire id et l'utiliser comme clé primaire. Quelle est la meilleure façon de remplir cette colonne avec les valeurs d'un 1 à row count 

Actuellement, j'utilise le curseur et met à jour les lignes une par une. Cela prend des heures. Y a-t-il un moyen de faire ça plus vite?

Je vous remercie

47
Sergejs

Fais-le comme ça:

ALTER TABLE dbo.YourTable
ADD ID INT IDENTITY(1,1)

et la colonne sera créée et automatiquement remplie avec les valeurs integer (comme le souligne Aaron Bertrand dans son commentaire: vous ne contrôlez pas quelle ligne obtient quelle valeur, SQL Server le gère elle-même et vous ne pouvez pas l’influencer. Mais toutes les lignes auront une valeur int valide - il n’y aura pas de valeurs NULL ou en double).

Ensuite, définissez-le comme clé primaire:

ALTER TABLE dbo.YourTable
ADD CONSTRAINT PK_YourTable PRIMARY KEY(ID)
110
marc_s

Si vous souhaitez ajouter des numéros de ligne dans un ordre spécifique, vous pouvez effectuer ROW_NUMBER () dans une nouvelle table, puis supprimer celle d'origine. Toutefois, en fonction de la taille de la table et d'autres contraintes commerciales, vous ne voudrez peut-être pas le faire. Cela implique également qu’il existe une logique selon laquelle vous souhaitez que la table soit triée.

SELECT ROW_NUMBER() OVER (ORDER BY COL1, COL2, COL3, ETC.) AS ID, *
INTO NEW_TABLE
FROM ORIGINAL_TABLE
0
Misa