У меня есть схема со следующей структурой;
В MPRMain
таблице, Status
может быть 1 (Aprove), 2 (Отмена) и 3 (В ожидании). Я пытаюсь сделать что-то подобное. Например, когда кто-то обновляет Status
(в MPRMain) до 2 (Отмена). Я хочу обновить таблицу Status
таблицы MPRDetail
до 0 (0 для отключения и 1 для включения).
Итак, я попытался создать триггер для него, который выглядит так:SQL Server After Update Trigger Not Working
Alter Trigger Inventory.MprMainUpdate
ON Inventory.MPRMain
AFTER UPDATE
AS
BEGIN
declare @status as int;
set @status = (SELECT Status FROM inserted);
if(@status=2)
BEGIN
UPDATE Inventory.MPRDetail
SET Status = 0 -- update the status to canceled
WHERE MPRId = (select MPRId from inserted);
END
END
Однако, когда я пытаюсь установить Status
из MPRMain
к 2 (Отмена) От 1 (Aprove), я не вижу каких-либо изменений в MPRDetail
таблице. Это должно обновить статус MPRDetail
до 0 (0 для отключения).
Ваша первая проблема заключается в том, что вы ** неправомерно ** предполагая, что триггер называется ** один раз в строке ** - это не так. Он называется ** один раз за оператор **, а ваша таблица «Inserted» может (и * будет *!) Содержать несколько строк - так что вы выбираете с помощью 'set @status = (SELECT Status FROM вставлен);' - это **не определен**. Вам нужно переписать триггер, чтобы принять во внимание, что 'Inserted' (и' Deleted') ** будет содержать несколько строк! Вам необходимо обработать те, у которых установленный подход –
@marc_s, любой пример от вас, будет оценен по достоинству. Раньше я не использовал триггеры. –