Controllo dell'esecuzione dei trigger durante l'importazione di massa 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 di massa. 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 di massa venga ridotta e che venga creato un numero eccessivo di messaggi.
È possibile controllare l'esecuzione (attivazione) dei trigger per le importazioni di massa di dati. Un'importazione di massa 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.
Importante: |
---|
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 attivati, vengono eseguiti una volta per ogni batch.
Durante un'importazione di massa, 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 di massa | 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 di massa 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 attivare i trigger tramite i qualificatori seguenti:
Comando | Qualificatore | Tipo di qualificatore |
---|---|---|
bcp |
-h"FIRE_TRIGGERS" |
Hint |
BULK INSERT |
FIRE_TRIGGERS |
Argomento |
Se per un'importazione di massa viene specificato 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 di massa 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 di massa OPENROWSET. Per ulteriori informazioni sull'hint IGNORE_TRIGGERS, vedere table_hint (Transact-SQL).
Importazione di batch di grandi dimensioni con i trigger attivati
SQL Server 2005 utilizza 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 di massa 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.
Vedere anche
Altre risorse
Utilità bcp
Bulk Copy Functions
BulkCopy Object
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Performing Bulk Copy Operations (ODBC)
table_hint (Transact-SQL)