Триггер вставки не работает при массовой вставке;триггер работает с курсором - PullRequest
1 голос
/ 19 июля 2010

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

Триггер вставки обновляет несколько столбцов целевой таблицы.Чтобы вставить объемные данные, я использую следующий скрипт

INSERT INTO DestinationTable (Column1, Column2)
SELECT * FROM SourceTable

Я получаю несколько столбцов в триггере вставленной записи, как следующий скрипт, и работаю над ними, чтобы обновить столбцы DestinationTable

SELECT @col1 = Column1, @col2 = Column2, FROM INSERTED
  1. Почему при массовой вставке триггер не работает?
  2. Я что-то упустил или мне нужно использовать курсор?

Я использую SQLServer 2005

РЕДАКТИРОВАТЬ

Код триггера

http://stashbox.org/957108/InsertTrigger.sql

Спасибо.

Ответы [ 3 ]

1 голос
/ 19 июля 2010

Из кода, который вы выложили, выглядит как массовая вставка, вы просто подразумеваете вставку нескольких строк. Не это БОЛЬШАЯ ВСТАВКА ?

Псевдо таблица INSERTED содержит все строки, вставленные оператором. Это не триггер уровня строки. Вам нужно будет использовать курсор для обработки RBAR или, в идеале, обрабатывать его как набор. Например, если вы обновляете другую таблицу, вы можете присоединиться к таблице inserted и обновить все строки в одном операторе.

0 голосов
/ 30 июля 2015

Кто сказал, что триггер не работает с bulkinsert или массовым копированием, я сделал это, и он работал отлично

0 голосов
/ 19 июля 2010

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

Мне кажется, я читал об обходном пути, который был довольно чистым. Дайте мне посмотреть, смогу ли я найти его.

РЕДАКТИРОВАТЬ: Вы знаете, когда вы сказали массовую операцию, я даже не обратил внимание на SQL и предположил, что вы используете BCP. Но я все еще помню работу вокруг, которую я собираюсь искать.

РЕДАКТИРОВАТЬ2: Хорошо, посмотрите на эту статью и посмотрите, поможет ли она вам: http://weblogs.sqlteam.com/tarad/archive/2004/09/14/2077.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...