Insertion en masse et Triggers

On m’a récemment posé cette question :

j’ai 300.000 enregistrements à insérer et pour chaque insertion, les triggers doivent être exécutés

Quand on parle d’une telle volumétrie d’insertion, on pense tout de suite à de l’insertion en mode BULK. Pour ce faire, nous avons à disposition :

  • un utilitaire en ligne de commande : bcp
  • l’instruction T-SQL : BULK INSERT

Le problème c’est que l’insertion BULK désactive les triggers par défaut. Mais les deux méthodes proposent une option pour ré-activer les triggers.

bcp -h "FIRE_TRIGGERS"

BULK INSERT .... WITH (FIRE_TRIGGERS)

Integration Services utilise intensivement l’insertion BULK via son composant OLE DB Destination avec l’option FastLoad. Les triggers étant désactivés par défaut, il faut les réactiver dans les options avancées du composant. Dans les propriétés, il y en a une appelée FastLoadOptions qui correspond au WITH de l’instruction BULK INSERT. Il suffit juste de rajouter FIRE_TRIGGERS dans la liste (séparé par des virgules).

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s