Compartir a través de


Controlar la ejecución de desencadenadores al importar datos masivamente

Un desencadenador es una forma especial de procedimiento almacenado que se ejecuta automáticamente cuando un usuario modifica los datos de una tabla o vista. La ejecución de desencadenadores puede afectar al rendimiento de una operación de importación masiva. Por ejemplo, un desencadenador que envíe un mensaje de correo electrónico cada vez que se importe un registro reduce la velocidad de una operación de importación masiva y crea una intensa actividad de correo electrónico.

Al importar datos masivamente, puede controlar si se ejecutan (activan) o no desencadenadores en la operación de importación masiva. En una operación de importación masiva sólo se deben ejecutar desencadenadores para una tabla con desencadenadores INSERT e INSTEAD OF que admitan la inserción de varias filas. Para obtener más información acerca de estos desencadenadores, vea Desencadenadores DML.

Nota importanteImportante

Si los desencadenadores están deshabilitados, puede realizarse un bloqueo de modificación de esquema para actualizar los metadatos. Esto puede interferir con otros comandos (por ejemplo, una operación de generación de índice en línea) o transacciones. Por ejemplo, se puede producir un error en una transacción de aislamiento de instantánea que tenga acceso a la tabla de destino a causa de los cambios DDL simultáneos.

Si los desencadenadores están habilitados, se ejecutan una vez por cada proceso por lotes.

Durante una operación de importación masiva, el comportamiento depende del comando utilizado para la operación. De forma predeterminada, el comando bcp y la instrucción BULK INSERT (Transact-SQL) deshabilitan los desencadenadores. Por el contrario, para la instrucción INSERT ... SELECT * FROM OPENROWSET(BULK...) el valor predeterminado es ejecutar los desencadenadores.

En la siguiente tabla se resume el comportamiento predeterminado.

Comando de importación masiva

Comportamiento predeterminado

bcp

Deshabilitar desencadenadores

BULK INSERT

Deshabilitar desencadenadores

INSERT ... SELECT * FROM OPENROWSET(BULK...)

Ejecutar desencadenadores

Cada uno de los comandos de importación masiva proporciona un calificador que le permite cambiar la forma de controlar los desencadenadores, como se describe en las secciones siguientes.

Ejecutar desencadenadores con el comando bcp o la instrucción BULK INSERT

De forma predeterminada, el comando bcp y la instrucción BULK INSERT no ejecutan desencadenadores. Sin embargo, puede habilitarlos mediante los siguientes calificadores:

Comando

Calificador

Tipo de calificador

bcp

-h"FIRE_TRIGGERS"

Sugerencia

BULK INSERT

FIRE_TRIGGERS

Argumento

Si se especifica FIRE_TRIGGERS para una operación de importación masiva, ejecuta los desencadenadores INSERT e INSTEAD OF que estén definidos en la tabla para todas las filas insertadas en ella.

Para obtener más información, vea bcp (utilidad) y BULK INSERT (Transact-SQL).

Deshabilitar desencadenadores en la instrucción INSERT ... SELECT * FROM OPENROWSET(BULK...)

De forma predeterminada, el proveedor de conjuntos de filas masivos OPENROWSET ejecuta desencadenadores. Puede deshabilitar los desencadenadores mediante el siguiente calificador:

Comando

Calificador

Tipo de calificador

INSERT ... SELECT * FROM OPENROWSET(BULK...)

WITH(IGNORE_TRIGGERS)

Sugerencia de tabla

Si se especifica la sugerencia, el proveedor de conjuntos de filas masivos OPENROWSET no ejecuta desencadenadores. Para obtener más información acerca de la sugerencia IGNORE_TRIGGERS, vea Sugerencias de tabla (Transact-SQL).

Importar lotes de gran tamaño con los desencadenadores habilitados

SQL Server 2005 y las versiones posteriores usan el control de versiones de filas para desencadenadores y almacenan las versiones de filas en el almacén de versiones, en tempdb. Antes de poder importar de forma masiva un gran lote de registros de datos usando desencadenadores, puede ser necesario ampliar el tamaño de tempdb para que quepan los desencadenadores en el almacén de versiones. Para obtener más información, vea Uso de recursos del control de versiones de filas.