Comment insérer un DataTable avec une clé existante dans une table SQL Server

database datatable sqlbulkcopy sql-server vb.net

Question

Je travaille avec VB.NET .. J'ai un DataTable appelé "QUESTION", contenant 3 champs:

  • QuestionNumber (clé unique unique)
  • QuestionText
  • Type de question

Dans ma base de données SQL Server, j'ai créé une table appelée "QUESTION" avec les mêmes champs. QuestionNumber est défini comme clé unique entière, incrémentation automatique

Maintenant, lorsque je fais une copie en bloc pour insérer le DataTable dans le serveur SQL, la base de données remplace mon numéro de question à partir du DataTable et en génère de nouveaux (à partir d'un incrément 1).

Comment dois-je modifier la configuration de ma base de données pour que les numéros de question d'origine soient copiés dans la base de données?

Réponse acceptée

en utilisant simplement l'insertion, essayez:

SET IDENTITY_INSERT [your table] ON
INSERT INTO [your table] (identityCol, col1,...) VALUES (identityCol, col1,...)
SET IDENTITY_INSERT [your table] OFF

lors de la copie en bloc de données, vous devez ajouter un paramètre / commutateur / indicateur spécial à la commande. Ils sont détaillés ici:

Conserver les valeurs d'identité lors de l'importation en bloc de données


Réponse populaire

Recherchez IDENTITY INSERT. Vous l'allumez. Mettez à jour le tableau, puis éteignez-le.

SET IDENTITY_INSERT table ON

Veuillez noter que vous ne pouvez l’utiliser que pour une table à la fois. Si vous l'activez pour une autre table, la dernière table est désactivée.

Si vous insérez une valeur supérieure à la plus grande valeur existante, elle sera réensemencée sur cette valeur, de sorte que toutes les nouvelles valeurs sont supérieures.

Encore une fois, n'oubliez pas de l'éteindre:

SET IDENTITY_INSERT table OFF

Si vous effectuez littéralement BULK INSERT, n'oubliez pas le qualificatif KEEPIDENTITY, qui indique au serveur de ne PAS ignorer vos valeurs d'identité, sinon il ignorera vos valeurs d'identification et en générera de nouvelles pour la colonne identité.

Conserver les valeurs d'identité lors de l'importation en bloc de données



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