Est-il possible de définir la valeur d'un champ d'incrémentation automatique? Si un enregistrement est supprimé avec la clé primaire 5, mais que le compte d'incrémentation automatique actuel est 10, est-il possible de réinsérer cet enregistrement avec sa clé primaire restant à 5 (au lieu de 11)? J'essaye de faire ceci avec Entity Framework 4.1 en C#.Comment réattribuer une valeur de clé primaire à incrémentation automatique?
Répondre
Bien qu'il y ait eu plusieurs bonnes suggestions ici, j'ai réalisé plusieurs choses tout en travaillant avec la solution à cette question. La divulgation que la base de données était un MySQL aurait peut-être aidé ici, mais je ne me suis pas rendu compte à l'époque que la différence serait si importante. En fait, dans MySQL, il n'y a pas de verrou contre l'insertion dans une clé primaire auto-incrémentée. En conséquence, ce code fonctionne pour insérer un enregistrement avec une clé primaire inférieure à la valeur actuelle de l'indice auto-increment:
var sql = @"INSERT INTO Work (
WorkId ,
LotId ,
Description ,
)
VALUES (
'5', '5', 'This Works'
);";
using (var db = new Context())
{
db.Database.ExecuteSqlCommand(sql);
}
insérer correctement un enregistrement avec l'indice 5, même si le courant automatique le nombre d'incrément est à 11.
Cité de Tom Haigh:
You could drop the primary key column and re-create it. All the ids will then be reassigned, I assume in the order in which the rows were inserted.
However, I'm not sure why you'd want to do this, especially if you have other tables that hold a foreign key to this table. If so you would need to update those fields as well, in which case dropping and recreating the column wouldn't be a good solution. You could instead re-name the column, remove the autoinc/primary key property, then create a new autoinc primary key column. You then would have both the old and new ids which you could use to update such foreign keys.
J'avais effectivement lu la réponse de cette personne avant, et il semblait que maintenant et maintenant être surpuissant. –
Je pense que vous pouvez également utiliser
Set Identity_Insert TableName ON
Update your Id value
Set Identity_Insert TableName OFF
Cela semble être une très bonne suggestion. Je vais devoir comprendre comment exécuter ce SQL brut en C# et si cela fonctionne, je vais marquer cela comme la réponse. –
J'ai eu cette erreur: 'Exception Détails: MySql.Data.MySqlClient.MySqlException: variable système inconnue 'Identity_Insert'' –
@TravisJ pouvez-vous poster la commande SQl que vous utilisez? – NiK
Vous pouvez désactiver le identity specification. Votre clé primaire resterait intacte mais vous pourriez insérer un nouvel enregistrement avec un identifiant de votre choix. Après avoir inséré l'enregistrement, vous souhaitez réactiver la spécification d'identité.
- 1. Clé primaire composite (alphanumérique) et incrémentation automatique
- 2. Incrémentation automatique de SQL Server une colonne sans clé primaire
- 3. Comment créer une clé primaire d'incrémentation automatique?
- 4. Modification de la clé primaire en incrémentation automatique
- 5. Incrémentation automatique sur Composite Clé primaire - Sqlite3 + Python
- 6. Définir la valeur de clé primaire 0 et incrémentation automatique sur la migration PostgreSQL
- 7. Mise à jour d'un champ ID PRIMAIRE avec incrémentation automatique
- 8. Insertion d'une clé primaire à incrémentation automatique dans une autre table (pour la joindre plus tard)
- 9. mysql incrémentation automatique de
- 10. Cluster MySQL partitionnement d'une table avec une clé primaire unique BIGINT à incrémentation automatique
- 11. Ajouter Indentity (incrémentation automatique) à la clé primaire de la table existante
- 12. Comment désactiver l'auto-incrémentation de clé primaire de Subsonic?
- 13. DataAdapter Update() nécessite un paramètre d'entrée pour la colonne de clé primaire incrémentation automatique
- 14. SQL Server - Création d'une clé unique à incrémentation automatique
- 15. sqlite: clé primaire multi-colonne avec une colonne d'incrémentation automatique
- 16. SQL Server: incrémentation automatique
- 17. ajouter une clé primaire avec auto-incrémentation dans mysql
- 18. PHP mySQL - Insérer un nouvel enregistrement dans une table avec incrémentation automatique sur la clé primaire
- 19. Champ Django BigInteger à incrémentation automatique en tant que clé primaire?
- 20. incrément automatique oracle à la clé primaire
- 21. Oracle - Modifier une table existante à incrémentation automatique une colonne
- 22. Comment régler incrémentation automatique à partir de 5000
- 23. instruction d'insertion SQL Server à incrémentation automatique
- 24. Incrémentation automatique dans la chaîne de valeur
- 25. incrément automatique de clé primaire sql
- 26. Comment insérer une valeur de clé primaire explicitement?
- 27. Meilleure clé primaire pour une table d'amitié
- 28. incrémentation automatique échoue
- 29. Incrémentation automatique unique à une autre colonne
- 30. ID de conteneur C# à incrémentation automatique
Il y en a qui se demanderaient si jamais cela serait nécessaire, car il est rare que ce cas se produise, et mon usage sera d'imp lement une fonction de restauration où un enregistrement peut être restauré avec sa clé primaire d'origine. –