Триггер SQL Server, который работает - срабатывает только один раз - PullRequest
1 голос
/ 15 января 2010

Я хочу сделать некоторые вычисления, когда мои данные таблицы изменятся. Однако я обновляю свою таблицу вручную и копирую около 3000 строк за один раз. Это заставляет мой триггер работать 3000 раз, но я хочу, чтобы он срабатывал только один раз.

Есть ли способ сделать это?

Спасибо.

Ответы [ 5 ]

5 голосов
/ 15 января 2010

Каково ваше заявление?

Если у вас есть несколько вставок , он будет срабатывать для каждой вставки, которую вы используете. Если вы хотите, чтобы он выполнялся только один раз для нескольких вставок, вы должны:

  1. Напишите свою вставку в одном утверждении, например insert into foo select * from bar
  2. Ваш триггер не может быть для каждой строки

Другая возможность может быть:

  1. Отключить триггер
  2. Выполните вставки
  3. Поместите код триггера в хранимую процедуру
  4. Запустите вашу хранимую процедуру
1 голос
/ 15 января 2010

Если под «вручную» вы подразумеваете, что копируете и вставляете в какой-либо инструмент пользовательского интерфейса (например, Access dataGrid) или что-то в этом роде, то инструмент может выдавать один оператор вставки на строку, и в этом случае вы выходите удачи триггер базы данных будет выполнен один раз для оператора вставки. Как уже упоминалось в других ответах, если вы можете вставить строки непосредственно в базу данных, используя один оператор вставки, то триггер сработает только один раз.

1 голос
/ 15 января 2010

Проблема вызвана тем, что вы вручную вставляете 3000 строк. У вас действительно есть 2 решения. Вы можете отключить триггер, выполнив следующее:

ALTER TABLE tablename DISABLE TRIGGER ALL 
-- do work here 
ALTER TABLE tablename ENABLE TRIGGER ALL

и затем запустите содержимое вашего триггера в конце, иначе вы можете поместить 3000 столбцов во временную таблицу и затем вставить их все сразу. Это только установит 1 триггер. Если этого недостаточно, дайте нам больше информации о том, что вы пытаетесь сделать.

0 голосов
/ 04 марта 2017

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

0 голосов
/ 15 января 2010

Ваш триггер не будет срабатывать 3000 раз, если вы изменяете 3000 строк в одном операторе. Ваш триггер сработает один раз, и в вашей виртуальной «удаленной» таблице будет 3000 строк.

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