Являются ли триггеры Sql синхронными или асинхронными?

StackOverflow https://stackoverflow.com/questions/210097

Вопрос

У меня есть таблица, в которой есть триггер вставки.Если я вставлю 6000 записей в эту таблицу одним оператором вставки из хранимой процедуры, вернется ли хранимая процедура до завершения триггера вставки?

Просто чтобы убедиться, что я правильно думаю, триггер следует вызывать только один раз (я знаю, что «вызывается» — не то слово) один раз, потому что был только один оператор вставки, верно?

Мой главный вопрос:завершится ли процедура, даже если триггер не завершился?

Это было полезно?

Решение

Триггер вставки будет выполняться один раз для всего оператора вставки.Вот почему важно использовать inserted временную таблицу, чтобы увидеть, что на самом деле было вставлено, а не просто выбрать самую последнюю запись или что-то в этом роде.

Я только что протестировал триггер вставки и обновления, и действительно, сервер sql считает их частью вставки.процесс не завершится до тех пор, пока не завершится триггер.

Другие советы

Триггеры являются частью транзакции, которая их вызвала.

Одна важная вещь о триггерах, о которой вы должны знать, это то, что триггер срабатывает один раз для каждой транзакции (по крайней мере, на SQL-сервере вам следует проверять другие базы данных, но даже если он будет обрабатывать строку за строкой, это обычно плохая идея). , поэтому, если вы вставите 6000 записей, триггер сработает один раз, а не 6000 раз.Многие люди не знают об этом и пишут триггеры так, как будто они будут обрабатывать несколько вставок записей по одной записи за раз.Это не так, и ваш триггер должен учитывать обработку вставки нескольких записей.

Вызов триггера не является асинхронным.Каждый вызов процедуры вставки приведет к срабатыванию триггера, и процедура не вернется до тех пор, пока триггер не завершится.

Взгляните на план запроса, чтобы увидеть, как он работает.Вы увидите, что операторы триггера будут вызываться при каждом вызове процедуры.

Дело в том, что каждый раз, когда выполняется критерий ТРИГГЕР, ТРИГГЕР срабатывает.Он срабатывает один раз при пакетной обработке или транзакции.Смотри мой урок 101 на ТРИГГЕРЕ

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top