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
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)
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