Pourquoi mes déclencheurs ne sont-ils pas déclenchés lors d'un insert 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 obtenir le déclenchement du déclencheur dans SSIS?
3 réponses
É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 insert en vrac (MSDN):
Si FIRE_TRIGGERS n'est pas spécifié, aucun déclencheur d'insertion ne s'exécute.
Il faut spécifier manuellement FIRE_TRIGGERS dans le cadre du composant OLE DB via son éditeur avancé.
Puis ajoutez "FIRE_TRIGGERS" à la valeur de FastLoadOptions (notez que les options sont séparés par des virgules):
Avec cette option en place, les déclencheurs doivent se déclencher pendant l'exécution de la tâche.
Complétant la réponse de ladenedge.
Étant donné que la tâche de Destination OLE DB utilise une insertion en bloc, les déclencheurs sont Non déclenché par défaut
C'est vrai lorsque vous avez sélectionné l'option" Charge Rapide".
Si vous le changez en un mode d'accès aux données "table ou vue" normal, vos déclencheurs devraient se déclencher normalement car l'insertion est effectuée ligne par ligne
Vous pouvez le faire sans utiliser L'outil de données SQL Server pour Visual Studio en éditant le fichier dtsx avec le bloc-notes (ou tout autre éditeur de texte).
Recherchez 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 ajouter la valeur FIRE_TRIGGERS comme Diego déjà décrit.