Pas d'incrémentation automatique pour la PK lors de l'insertion de doublons avec IGNORE_DUP_KEY = ON

entity-framework sqlbulkcopy sql-server

Question

J'ai mis IGNORE_DUP_KEY = ON afin qu'il n'y ait aucun avertissement lorsque nous essayons d'insérer beaucoup de données. Toutefois, la clé primaire augmente pour chaque ligne en double. Il est donc possible de passer de Id 100 à 120 lorsque vous avez 20 lignes en double. Est-il possible de le laisser continuer à 101 sans définir manuellement la valeur? J'utilise SqlBulkCopy et Entity Framework et une requête SQL ne permet pas de résoudre ce problème (par exemple, en utilisant NOT EXISTS). Bien sûr, nous pourrions d'abord vérifier si un enregistrement existe déjà, mais nous préférons ne pas le faire pour des raisons de performance.

Réponse acceptée

Si vous avez besoin de valeurs d'identité continues, alors IDENTITY n'est pas pour vous. Il n'y a absolument aucune garantie que les valeurs d'identité ne peuvent pas disparaître. Votre scénario n'est pas le seul cas où cela se produit.

Soit vous gérez vous-même les identifiants (en utilisant une séquence, par exemple, difficile à intégrer dans un chargement en bloc), soit vous vous disputez de la nécessité de disposer d'identifiants ininterrompus.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi