2012-06-01 15 views
23

Tengo una tarea de flujo de datos SSIS con un componente de destino OLE DB que inserta registros en una tabla con un desencadenador. Cuando ejecuto una declaración INSERT normal en esta tabla, el disparador se dispara. Cuando inserto registros a través de la tarea SSIS, el disparador no se activa.¿Por qué no disparan mis desencadenantes durante una inserción por SSIS?

¿Cómo puedo activar el disparador en SSIS?

Respuesta

45

Dado que la tarea Destino OLE DB utiliza una inserción masiva, los desencadenadores no se desencadenan de manera predeterminada. De BULK INSERT (MSDN):

Si no se especifica FIRE_TRIGGERS, no se ejecutarán desencadenantes de inserción.

Hay que especificar manualmente FIRE_TRIGGERS como parte del componente OLE DB a través de su Editor avanzado.

enter image description here

A continuación, añadir "FIRE_TRIGGERS" al valor de FastLoadOptions (tenga en cuenta que las opciones son separados por comas):

enter image description here

Con esa opción en su lugar, los factores desencadenantes deben disparar durante la ejecución de la tarea.

+0

¿Tiene uno opciones similares si están utilizando y conexión ADO.Net y trabajando en una base de datos SQL mediante programación? – NealR

+0

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

+0

Solo quiero agregar, con 'OLE DB Destination', si tiene marcado' Keep nulls', tampoco se desencadenarán sus desencadenadores. – MisterIsaak

14

complementando la respuesta de ladenedge.

Debido a que la tarea de destino de OLE DB utiliza una inserción masiva, los disparadores se no activado de forma predeterminada

que es cierto cuando se tiene la opción de "carga rápida" seleccionado.

enter image description here

Si lo cambia a un habitual "tabla o vista" modo de acceso a datos, los factores desencadenantes deben disparar normalmente debido a que la inserción se hace fila por fila

+0

Normalmente está utilizando carga masiva porque sus cientos de miles de filas son demasiado lentas para hacer una operación Fila por Fila, mucha gente encontrará que esta no es la mejor solución. –

0

Usted puede hacer esto sin usar Herramienta de datos de SQL Server para Visual Studio editando el archivo dtsx con el Bloc de notas (o cualquier otro editor de texto).

Búsqueda de la siguiente propiedad:

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

y añadir los FIRE_TRIGGERS valor como Diego ya se ha descrito.

Cuestiones relacionadas