web-dev-qa-db-fra.com

Pourquoi mes déclencheurs ne se déclenchent-ils pas lors d'une insertion par SSIS?

J'ai une tâche de flux de données SSIS avec un composant de destination OLE DB qui insère des enregistrements dans une table avec un déclencheur. Lorsque j'exécute une instruction INSERT normale sur cette table, le déclencheur se déclenche. Lorsque j'insère des enregistrements via la tâche SSIS, le déclencheur ne se déclenche pas.

Comment puis-je déclencher le déclenchement dans SSIS?

24
ladenedge

Étant donné que la tâche de destination OLE DB utilise une insertion en bloc, les déclencheurs ne sont pas déclenchés par défaut. De BULK INSERT (MSDN) :

Si FIRE_TRIGGERS n'est pas spécifié, aucun déclencheur d'insertion n'est exécuté.

Il faut spécifier manuellement FIRE_TRIGGERS dans le composant OLE DB via son éditeur avancé.

enter image description here

Ajoutez ensuite "FIRE_TRIGGERS" à la valeur de FastLoadOptions (notez que les options sont séparées par une virgule):

enter image description here

Avec cette option en place, les déclencheurs doivent se déclencher pendant l'exécution de la tâche.

48
ladenedge

complément de la réponse de ladenedge.

Étant donné que la tâche de destination OLE DB utilise une insertion en bloc, les déclencheurs ne sont pas déclenchés

c'est le cas lorsque l'option "chargement rapide" est sélectionnée.

enter image description here

Si vous le modifiez en un mode d'accès aux données "table ou vue" normal, vos déclencheurs doivent se déclencher normalement car l'insertion est effectuée ligne par ligne.

15
Diego

Vous pouvez le faire sans utiliser l'outil de données SQL Server pour Visual Studio en modifiant le fichier dtsx avec le bloc-notes (ou tout autre éditeur de texte).

Rechercher la propriété suivante:

<property
 dataType="System.String"
 description="Specifies options to be used with fast load.  Applies only 
 if  fast load is turned on."
 name="FastLoadOptions">
      TABLOCK,CHECK_CONSTRAINTS
</property>

et ajoutez la valeur FIRE_TRIGGERS comme Diego déjà décrite.

0
Stefan