Посмотрев на другие примеры, я пришел к следующему, но, похоже, он не работает так, как хотелось бы: я хочу, чтобы он обновлял измененную информацию только в том случае, если QtyToRepair
значение было обновлено ... но это не так. который.
Если я закомментирую где, то измененная информация будет обновляться в каждом случае. Как я уже сказал, другие примеры внушали мне оптимизм. Любые подсказки приветствуются. Спасибо.
Уолтер
ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified]
ON [dbo].[SCHEDULE]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE SCHEDULE SET modified = GETDATE()
, ModifiedUser = SUSER_NAME()
, ModifiedHost = HOST_NAME()
FROM SCHEDULE S
INNER JOIN Inserted I on S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber
WHERE S.QtyToRepair <> I.QtyToRepair
END
sql
sql-server
triggers
Вальтер де Йонг
источник
источник
update()
- он только проверяет, появляется ли столбец в списке обновлений, и всегда верно для вставок. Он не проверяет, изменилось ли значение столбца, потому что у вас может быть более одной строки, где некоторые значения изменились, а некоторые нет.Ответы:
У вас есть два способа ответить на ваш вопрос:
1- Используйте команду обновления в триггере.
2- Используйте соединение между вставленной и удаленной таблицей
Когда вы используете команду обновления для таблицы
SCHEDULE
и устанавливаетеQtyToRepair
столбец на новое значение, если новое значение равно старому значению в одной или нескольких строках, решение 1 обновляет всю обновленную строку в таблице расписания, но решение 2 обновляет только строки расписания, старое значение не равно новому стоимость.источник
inserted
таблице во втором запросе? он должен быть таким же, как и сама таблица, не так ли?fyi Код, который у меня получился:
источник
WHERE S.QtyToRepair <> I.QtyToRepair AND D.QtyToRepair <> I.QtyToRepair
никогда не запускались / не соответствовали, поскольку первый критерий никогда не был истинным - вставленная таблица всегда соответствовала фактическому значению таблицы. Использование `WHERE I.QtyToRepair <> D.QtyToRepair` было для меня ключевым моментом. ТакжеIF UPDATE (field)
помощь от срабатывания нескольких триггеров.Следует
QtyToRepair
сначала проверить, обновляется ли.источник
Вы хотите сделать следующее:
Обратите внимание, что этот триггер срабатывает каждый раз, когда вы обновляете столбец, независимо от того, одинаковое значение или нет.
источник
Каждый раз, когда запись обновляется, она «удаляется». Вот мой пример:
Отлично работает
источник