9
votes

Utilisation de SQLBulkCopy pour insérer / mettre à jour la base de données

J'ai un jeu de données avec les enregistrements.Je insertion d'enregistrements dans la table SQL à l'aide de sqlbulkcopy.it fonctionne fine.Next Time Lorsque vous obtenez le jeu de données avec les mêmes enregistrements avec quelques valeurs modifiées SQLBulkCopy insère un autre ensemble d'enregistrements sans mettre à jour le précédent. Détails. Comment puis-je mettre à jour la table SQL à l'aide de sqlbulkcopy ?? S'il vous plaît aider.

merci, Vix


0 commentaires

4 Réponses :


16
votes

sqlbulkcopy n'est utilisé que pour insérer des enregistrements, ne pas les mettre à jour comme expliqué Ici . Vous auriez besoin d'utiliser une technique différente pour faire des mises à jour en vrac.

E.g. Vous pourriez sqlbulkcopy dans une table de mise en scène, puis exécutez du SQL pour mettre à jour de là à la table principale.


1 commentaires

+1 Pour la table de rassemblement, c'est exactement la manière dont vous devez faire des mises à jour avec insert en vrac et pour des quantités massives de mises à jour sur les mêmes tables, il vaut bien l'effort de le faire.



3
votes

Tronquez la table et effectuez BulkCopy.


2 commentaires

Pour VIX: tronquez, la charge en vrac est le processus le plus efficace si vous voulez seulement que la table résultante ne contienne que les enregistrements de charge en vrac. - upvoté


Forte pour certaines situations simples, mais ce serait une véritable douleur si un niveau de complexité dans les données que vous mettez à jour. Le maintien de votre intégrité de données pourrait être très difficile en fonction des particularités de l'application / dB. par exemple. Les relations FK doivent être conservées.



3
votes

Évitez la table tronquée et créez une nouvelle table temporaire, laquelle BTW consommez plus d'espace et de mémoire.

J'ai créé un déclencheur avec au lieu d'insérer et d'utiliser une déclaration de fusion à l'intérieur.

mais n'oubliez pas d'ajouter le paramètre sqlbulkcopyoption.firtriggers dans la SQLBulkCopy.

Ceci est mes deux cents.


0 commentaires

-1
votes

Comme mentionné par adathedidev, SQLBulkCopy ne peut que l'insertion, mais une bibliothèque alternative permettant d'effectuer des opérations upersert.

Disclaimer strong>: Je suis le propriétaire du projet Opérations en vrac p>

La bibliothèque d'opérations en vrac a une méthode" Bulkmerge fort> "Quel insert ou Mettre à jour les lignes basées sur la clé spécifiée. P>

var bulk = new BulkOperation(connection);

bulk.ColumnMappings.Add("ID", true);
bulk.ColumnMappings.Add("Column1");
bulk.ColumnMappings.Add("Column2");
bulk.ColumnMappings.Add("Column3");

bulk.BulkMerge(dt);


0 commentaires