Existe-t-il une commande BulkUpdate similaire à BulkCopy dans SQL Server 2008?

c# sqlbulkcopy sql-server sql-update

Question

J'ai utilisé la commande BulkCopy pour transférer des lignes d'une table à une autre avec des données en bloc d'environ 3 à 5 millions de lignes. Je veux mettre à jour ces lignes.

Existe-t-il une commande BulkUpdate similaire à la commande BulkCopy ? J'utilise ASP.NET avec C #.

Réponse d'expert

Une approche commune est la suivante:

  • Chargement en bloc (SqlBulkCopy) dans une table intermédiaire * vide - ce qui signifie: une table avec les bons types de colonnes / types comme données réelles, mais ne faisant pas partie du système transactionnel principal
  • maintenant faire une mise à jour joignant les données réelles aux données intermédiaires, pour mettre à jour les valeurs dans les données réelles

Réponse d'expert

Disclaimer : Je suis le propriétaire du projet Bulk Operations

La bibliothèque des opérations en bloc permet d'insérer, de supprimer, de mettre à jour et de fusionner des millions de lignes en quelques secondes.

Il est très facile à apprendre et à utiliser si vous connaissez déjà la classe SqlBulkCopy.

var bulk = new BulkOperation(connection);
// ... Mappings ....

bulk.BulkUpdate(dt);

Réponse populaire

Non, il n'y en a pas.

Q: Qu'est-ce qu'un "lac"?

Cela pourrait aider:

http://itknowledgeexchange.techtarget.com/itanswers/bulk-update-in-sql-server-2005/

En supposant que vous ayez une colonne avec des valeurs de conflit pour vous montrer quelles sont les lignes entre les deux tables, ceci peut être fait avec une simple instruction update

UPDATE TableA
SET TableA.A1 = TableB.B1,
    TableA.A2 = TableB.B2  
FROM TableB  
WHERE TableA.A3 = TableB.B3

Si vous craignez de créer une seule transaction massive, vous pouvez la traiter en plusieurs parties. Cela se fait via le mot clé TOP.

UPDATE TOP (1000) TableA
SET TableA.A1 = TableB.B1,
    TableA.A2 = TableB.B2  
FROM TableB  
WHERE TableA.A3 = TableB.B3
      AND TableA.A1 <> TableB.B1
      AND TableA.A2 <> TableB.B2

Vous pouvez mettre cela dans une boucle ...

Voici un autre lien (avec essentiellement la même solution):

http://www.sqlusa.com/bestpractices2005/hugeupdate/



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