Instruction d'insertion SQL Server à incrément automatique

J'ai une instruction d'insertion SQL comme celle-ci:

insert into mytable(ID,Keyindex,KeyValue) select Id,1,GenreID from mytable2 

Ce qui devrait remplir ma table avec des données comme:

 id GenreID ColumnB 0006342c-47bc-436a-a23a-3b40360d9a30 16 1 0006342c-47bc-436a-a23a-3b40360d9a30 19 1 00109775-f0f8-463e-8134-f842aac8b5df 12 1 001211e3-9bf8-45ad-8297-7a0a94aaf06e 13 1 0025218a-9624-4f5e-86cc-f1cfe862cd2a 16 1 0025218a-9624-4f5e-86cc-f1cfe862cd2a 11 1 0025218a-9624-4f5e-86cc-f1cfe862cd2a 15 1 

Le problème est ID, GenreId et ColumnB sont des keys primaires et j'insère actuellement une valeur constand "1" qui entraîne une violation de key primaire.

Comment puis-je insert dans la table afin que ColumnB soit rempli avec une valeur incrémentielle si les ID sont identiques.

Par exemple:

 id GenreID ColumnB 0006342c-47bc-436a-a23a-3b40360d9a30 16 1 0006342c-47bc-436a-a23a-3b40360d9a30 19 2 00109775-f0f8-463e-8134-f842aac8b5df 12 1 001211e3-9bf8-45ad-8297-7a0a94aaf06e 13 1 0025218a-9624-4f5e-86cc-f1cfe862cd2a 16 1 0025218a-9624-4f5e-86cc-f1cfe862cd2a 16 2 0025218a-9624-4f5e-86cc-f1cfe862cd2a 16 3 

Votre question est un peu confuse. Dans la section "par exemple", il semble que le genreID pour 0025218a-9624-4f5e-86cc-f1cfe862cd2a devrait être 16,17,19 au lieu de 16,16,16 .

En supposant que je vous comprenne bien, vous pouvez utiliser ROW_NUMBER() OVER partitionné par l'ID. Quelque chose comme ce qui suit devrait fonctionner:

 insert into mytable(ID,Keyindex,KeyValue) select id, GenreID , ROW_NUMBER() OVER (Partition by id order by id) as ColumnB from mytable2 order by id, genereid 

Note: vous n'avez pas spécifié de version, mais cela fonctionnera dans sql 2005+

Un hack sale serait d'utiliser id - someNumber ou id + someNumber au lieu de seulement 1 .

Ce qui peut être accepté s'il s'agit d'une opération «feu et oublie» une fois.

Si vous devez vérifier l'unicité, un triggersur peut être la solution.

Vous pouvez essayer l'option ON DUPLICATE:

 insert into mytable(ID,Keyindex,KeyValue) select Id,1,GenreID from mytable2 ON DUPLICATE KEY UPDATE Keyindex = Keyindex+1;