Controllo dell'esecuzione dei trigger durante l'importazione bulk di dati

Un trigger è un particolare tipo di stored procedure che viene eseguito automaticamente quando un utente modifica i dati di una tabella o di una vista. L'esecuzione dei trigger può influire sulle prestazioni di un'operazione di importazione bulk. Ad esempio, se un trigger invia un messaggio di posta elettronica ogni volta che viene importato un record, è possibile che la velocità di un'importazione bulk venga ridotta e che venga creato un numero eccessivo di messaggi.

È possibile controllare l'esecuzione (attivazione) dei trigger per le importazioni bulk di dati. Un'importazione bulk dovrebbe eseguire unicamente i trigger relativi a una tabella con trigger INSERT e INSTEAD OF che supportano l'inserimento di più righe. Per ulteriori informazioni su questi trigger, vedere Trigger DML.

Nota importanteImportante

Se i trigger sono disattivati, per aggiornare i metadati è possibile utilizzare un blocco di modifica dello schema, che può tuttavia interferire con gli altri comandi, ad esempio la creazione di un indice in linea, o con le transazioni. Ad esempio, una transazione di isolamento dello snapshot che accede alla tabella di destinazione potrebbe non riuscire a causa di modifiche simultanee a DLL.

Se i trigger sono abilitati, vengono eseguiti una volta per ogni batch.

Durante un'importazione bulk, il funzionamento varia a seconda del comando utilizzato per l'operazione. Per impostazione predefinita, il comando bcp e l'istruzione (Transact-SQL) BULK INSERT disattivano i trigger. L'istruzione INSERT ... SELECT * FROM OPENROWSET(BULK...), invece, esegue i trigger per impostazione predefinita.

Nella tabella seguente viene riepilogato il funzionamento predefinito.

Comando per l'importazione bulk

Funzionamento predefinito

bcp

Disattivazione dei trigger

BULK INSERT

Disattivazione dei trigger

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

Esecuzione dei trigger

Ognuno dei comandi per l'importazione bulk fornisce un qualificatore che consente di modificare la modalità di gestione dei trigger, come descritto nelle sezioni seguenti.

Esecuzione di trigger con bcp o BULK INSERT

Per impostazione predefinita, il comando bcp e l'istruzione BULK INSERT non eseguono trigger. È tuttavia possibile abilitare i trigger tramite i qualificatori seguenti:

Comando

Qualificatore

Tipo di qualificatore

bcp

-h"FIRE_TRIGGERS"

Hint

BULK INSERT

FIRE_TRIGGERS

Argomento

Se specificato per un'importazione bulk, FIRE_TRIGGERS eseguirà tutti i trigger INSERT e INSTEAD OF definiti nella tabella per tutte le righe inserite nella tabella.

Per ulteriori informazioni, vedere Utilità bcp e BULK INSERT (Transact-SQL).

Disattivazione di trigger in INSERT ... SELECT * FROM OPENROWSET(BULK...).

Per impostazione predefinita, il provider di set di righe con lettura bulk OPENROWSET esegue i trigger. È possibile disattivare i trigger tramite il qualificatore seguente:

Comando

Qualificatore

Tipo di qualificatore

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

WITH(IGNORE_TRIGGERS)

Hint di tabella

Se viene specificato questo hint, i trigger non vengono eseguiti dal provider di set di righe con lettura bulk OPENROWSET. Per ulteriori informazioni sull'hint IGNORE_TRIGGERS, vedere Hint di tabella (Transact-SQL).

Importazione di batch di grandi dimensioni con i trigger abilitati

SQL Server 2005 e versioni successive utilizzano il controllo delle versioni delle righe per i trigger e memorizza le versioni delle righe nell'archivio delle versioni in tempdb. Prima che sia possibile eseguire l'importazione bulk di un batch di record di dati di grandi dimensioni utilizzando i trigger, potrebbe essere necessario aumentare le dimensioni di tempdb per adeguarsi all'impatto dei trigger sull'archivio delle versioni. Per ulteriori informazioni, vedere Utilizzo delle risorse di controllo delle versioni delle righe.