73 votes

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

J'ai un tableau contenant une grande 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 des valeurs provenant d'un des éléments suivants 1 a row count

Actuellement, j'utilise un curseur et je mets à jour les lignes une par une. Cela prend des heures. Existe-t-il un moyen de le faire plus rapidement ?

Merci.

161voto

marc_s Points 321990

Fais comme ça :

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

et la colonne sera créée et automatiquement remplie avec l'information suivante integer (comme le souligne Aaron Bertrand dans son commentaire - vous n'avez aucun contrôle sur quelle ligne obtient quelle valeur - SQL Server gère cela tout seul et vous ne pouvez pas l'influencer. Mais toutes les lignes recevront une valeur int valeur - il n'y aura pas de NULL ou des valeurs en double).

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

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

4voto

Misa Points 31

Si vous souhaitez ajouter des numéros de ligne dans un ordre spécifique, vous pouvez utiliser ROW_NUMBER() dans une nouvelle table, puis supprimer la table d'origine. Toutefois, en fonction de la taille de la table et d'autres contraintes commerciales, vous ne souhaiterez peut-être pas procéder ainsi. 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X