Управление выполнением триггеров при массовом импорте данных

Триггер — это особый вид хранимой процедуры, которая автоматически выполняется, когда пользователь изменяет данные в таблице или представлении. Выполнение триггеров может оказать влияние на производительность операций массового импорта. Например, триггер, отправляющий сообщение электронной почты при импорте каждой записи, снижает скорость выполнения операции массового импорта и создает большой поток сообщений электронной почты.

При массовом импорте данных выполнением (срабатыванием) триггеров можно управлять. Операция массового импорта должна вызывать срабатывание триггера только для таблиц с триггерами INSERT и INSTEAD OF, поддерживающих вставку нескольких строк. Дополнительные сведения об этих триггерах см. в разделе Триггеры DML.

ms187640.note(ru-ru,SQL.90).gifВажно!
Когда триггеры отключены, для обновления метаданных может сработать блокировка модификации схемы. Это может помешать работе других команд (например оперативному построению индексов) или транзакций. Например, в транзакции в режиме изоляции моментального снимка при доступе к целевой таблице может возникнуть ошибка из-за параллельно вносимых изменений DDL.

Если срабатывание триггеров разрешено, они выполняются один раз для всего пакета.

Т о, как именно выполняется операция массового импорта, зависит от команды, используемой для выполнения операции. По умолчанию команда bcp и инструкция BULK INSERT (Transact-SQL) отключают триггеры. А для инструкции INSERT ... SELECT * FROM OPENROWSET(BULK...) — наоборот, по умолчанию выполнение триггеров разрешено.

Следующая таблица содержит сводку возможных вариантов.

Команда массового импорта Поведение по умолчанию

bcp

Триггеры отключены

BULK INSERT

Триггеры отключены

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

Триггеры выполняются

Для всех команд массового импорта имеются квалификаторы, позволяющие изменять режимы выполнения триггеров, описанные в следующих разделах.

Выполнение триггеров с командой bcp или инструкцией BULK INSERT

По умолчанию команда bcp и инструкция BULK INSERT запрещают выполнение триггеров. Однако с помощью следующих квалификаторов можно разрешить его:

Команда Квалификатор Тип квалификатора

bcp

-h"FIRE_TRIGGERS"

Подсказка

BULK INSERT

FIRE_TRIGGERS

Аргумент

Если для операции массового импорта задан параметр FIRE_TRIGGERS, то для всех вставляемых в таблицу строк выполняются триггеры INSERT и INSTEAD OF, определенные для таблицы.

Дополнительные сведения см. в разделах Программа bcp и BULK INSERT (Transact-SQL).

Отключение триггеров в инструкции INSERT ... SELECT * FROM OPENROWSET(BULK...)

По умолчанию поставщик массовых наборов строк OPENROWSET разрешает выполнение триггеров. Его можно отключить с помощью следующих квалификаторов:

Команда Квалификатор Тип квалификатора

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

WITH(IGNORE_TRIGGERS)

Табличная подсказка

Если указана эта подсказка, то поставщиком массовых наборов строк OPENROWSET триггеры не выполняются. Дополнительные сведения о выражении IGNORE_TRIGGERS см. в разделе Табличная подсказка (Transact-SQL).

Импорт больших пакетов при включенном выполнении триггеров

SQL Server 2005 использует для триггеров управление версиями строк. Версии строк сохраняются в хранилище версий базы данных tempdb. Прежде чем производить массовый импорт большого пакета записей данных с помощью триггеров, может понадобиться расширить базу данных tempdb, учитывая возросшую потребность триггеров в емкости хранилища версий. Дополнительные сведения см. в разделе Использование ресурсов при управлении версиями строк.

См. также

Другие ресурсы

Программа bcp
Bulk Copy Functions
BulkCopy Object
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
Performing Bulk Copy Operations (ODBC)
Табличная подсказка (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005