2012-06-01 4 views
23

Possiedo un'attività di flusso di dati SSIS con un componente Destinazione OLE DB che inserisce record in una tabella con un trigger. Quando eseguo una normale istruzione INSERT su questa tabella, il trigger si attiva. Quando inserisco i record tramite l'attività SSIS, il trigger non viene attivato.Perché i trigger non si attivano durante un inserimento da SSIS?

Come posso attivare il trigger in SSIS?

risposta

45

Poiché l'attività Destinazione OLE DB utilizza un inserimento bulk, i trigger non vengono attivati ​​per impostazione predefinita. Da BULK INSERT (MSDN):

Se FIRE_TRIGGERS non è specificato, nessun trigger di inserimento viene eseguito.

Bisogna specificare manualmente FIRE_TRIGGERS come parte del componente OLE DB attraverso il suo editor avanzato.

enter image description here

Quindi aggiungere "FIRE_TRIGGERS" per il valore di FastLoadOptions (si noti che le opzioni sono separati da virgole):

enter image description here

Con questa opzione in atto, i trigger dovrebbero fuoco durante l'esecuzione del compito.

+0

Si hanno opzioni simili se stanno utilizzando e la connessione ADO.Net e lavorano su un database SQL a livello di programmazione? – NealR

+0

@NealR: sì, consultare [SqlBulkCopy] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy.aspx). – ladenedge

+0

Voglio solo aggiungere, con 'Destinazione OLE DB', se hai selezionato 'Mantieni nulli', i tuoi inneschi non saranno attivati. – MisterIsaak

14

complementare alla risposta di ladenedge.

Perché il compito destinazione OLE DB utilizza un inserimento di massa, trigger sono non licenziato per default

che è vero quando si ha la possibilità "caricamento rapido" selezionato.

enter image description here

Se si cambia in una regolare "tavolo o visualizzare" modalità di accesso ai dati, i trigger devono sparare normalmente perché l'inserto è fatto riga per riga

+0

In genere si utilizza il caricamento di massa perché centinaia di migliaia di righe sono troppo lente per eseguire un'operazione Row-by-Row, molte persone ritengono che questa non sia la soluzione migliore. –

0

Si può fare questo senza usare SQL Server Data Tool per Visual Studio modificando il file dtsx con Blocco note (o qualsiasi altro editor di testo).

Cercare la seguente proprietà:

<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> 

e aggiungere i FIRE_TRIGGERS valore come Diego già descritto.