Ajouter des valeurs de séquence d'identité à l'ID de colonne

J'ai une table et sauf la première colonne (ID) , toutes les autres colonnes remplies d'loggings (plus de 10000 loggings). Je veux remplir la colonne ID avec des numéros de séquence (1,2,3,4...) pour tous les loggings.

entrez la description de l'image ici

Production attendue:

entrez la description de l'image ici

J'ai essayé la déclaration suivante:

 SELECT ROW_NUMBER() OVER(ORDER BY ID) AS ID, Name FROM TableName 

Mais impossible d'utiliser le ROW_NUMBER () dans l'instruction UPDATE.

Comment faire ça?

Peut-être quelque chose comme ça:

Données de test:

 DECLARE @tbl TABLE(ID INT,Name VARCHAR(2)) INSERT INTO @tbl VALUES (null,'A'), (null,'B'), (null,'C'), (null,'D'), (null,'E') 

Ensuite, mettez à jour l'instruction comme ceci:

 ;WITH CTE AS ( SELECT ROW_NUMBER() OVER(ORDER BY name) AS rowNbr, tbl.* FROM @tbl AS tbl ) UPDATE CTE SET CTE.ID=CTE.rowNbr 

Ensuite, la sortie de ceci:

 SELECT * FROM @tbl 

Sera ceci:

 1 A 2 B 3 C 4 D 5 E 

Vous ne pouvez pas modifier une colonne existante pour qu'elle soit une IDENTITY , mais vous pouvez append une nouvelle colonne d'identité (à condition qu'il n'y ait qu'une seule identité sur la table). Étant donné que votre ID existant contient toutes les valeurs NULL, pourquoi ne pas les supprimer et les append à nouveau?

 ALTER TABLE MyTable DROP Column ID; GO Alter Table MyTable Add ID Int Identity(1, 1) Go 

SqlFiddle ici