Contrôle de l'exécution des déclencheurs lors de l'importation de données en bloc

Un déclencheur est une forme spéciale de procédure stockée qui s'exécute automatiquement lorsqu'un utilisateur modifie les données contenues dans une table ou une vue. L'exécution de déclencheurs peut affecter les performances d'une opération d'importation en bloc. Par exemple, un déclencheur qui envoie un message électronique à chaque importation d'un document réduit la vitesse d'une opération d'importation en bloc et génère une grand nombre messages électroniques.

Lors de l'importation de données en bloc, vous pouvez contrôler si les déclencheurs sont exécutés (déclenchés) par cette opération. Une opération d'importation en bloc ne doit exécuter des déclencheurs que pour une table dont les déclencheurs INSERT et INSTEAD OF prennent en charge les insertions de lignes multiples. Pour plus d'informations sur ces déclencheurs, consultez Déclencheurs DML.

Important

Lorsque les déclencheurs sont désactivés, un verrou de modification de schéma peut être utilisé pour mettre à jour les métadonnées. Cela peut interférer avec d'autres commandes (telles que la construction d'index en ligne) ou transactions. Par exemple, une transaction d'isolement de capture instantanée accédant à la table cible peut échouer en raison de modifications simultanées de DDL.

Si les déclencheurs sont activés, ils s'exécutent à une seule reprise pour chaque traitement.

Pendant une opération d'importation en bloc, le comportement dépend de la commande utilisée pour l'opération. Par défaut, la commande bcp et l'instruction BULK INSERT (Transact-SQL) désactivent les déclencheurs. Au contraire, pour l'instruction INSERT ... SELECT * FROM OPENROWSET(BULK...), la valeur par défaut est l'exécution des déclencheurs.

Le tableau suivant récapitule le comportement par défaut.

Commande d'importation en bloc

Comportement par défaut

bcp

Désactive les déclencheurs

BULK INSERT

Désactive les déclencheurs

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

Exécute les déclencheurs

Chaque commande d'importation en bloc fournit un qualificateur qui vous autorise à modifier le mode de traitement des déclencheurs, comme décrit dans les sections suivantes.

Exécution des déclencheurs avec la commande bcp ou l'instruction BULK INSERT

Par défaut, la commande bcp et l'instruction BULK INSERT n'exécutent pas les déclencheurs. Cependant, vous pouvez les activer à l'aide des qualificateurs suivants :

Commande

Qualificateur

Type de qualificateur

bcp

-h"FIRE_TRIGGERS"

Indicateur

BULK INSERT

FIRE_TRIGGERS

Argument

Si FIRE_TRIGGERS est spécifié pour une opération d'importation en bloc, il exécute tout déclencheur INSERT et INSTEAD OF défini sur la table pour l'ensemble des lignes insérées dans celle-ci.

Pour plus d'informations, consultez Utilitaire bcp et BULK INSERT (Transact-SQL).

Désactivation des déclencheurs dans INSERT ... SELECT * FROM OPENROWSET(BULK...)

Par défaut, le fournisseur d'ensembles de lignes en bloc OPENROWSET exécute les déclencheurs. Vous pouvez les activer à l'aide du qualificateur suivant :

Commande

Qualificateur

Type de qualificateur

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

WITH(IGNORE_TRIGGERS)

Indicateur de table

Si cet indicateur est spécifié, les déclencheurs ne sont pas exécutés par le fournisseur d'ensembles de lignes en bloc OPENROWSET. Pour plus d'informations sur l'indicateur IGNORE_TRIGGERS, consultez Indicateurs de table (Transact-SQL).

Importation de traitements volumineux avec les déclencheurs activés

SQL Server 2005 et les versions ultérieures utilisent la version de ligne pour les déclencheurs et stocke les versions des lignes dans le magasin de versions de la base de données tempdb. Pour pouvoir importer en bloc un traitement important d'enregistrements de données au moyen de déclencheurs, vous devrez peut-être augmenter la taille de tempdb pour tenir compte de l'impact des déclencheurs sur le magasin de versions. Pour plus d'informations, consultez Utilisation de la ressource de versioning de ligne.