У меня есть триггер после обновления / вставки для таблицы x. В этом триггере мне нужно проверить, обновлен ли определенный столбец, что достаточно просто сделать сравнение удаленной / вставленной таблицы. Однако, если определенный столбец был изменен на определенное значение, мне нужно обновить вставленную строку в таблице x. Это, очевидно, создает цикл. Проблема в том, что мне не повезло, что я зациклился на старте триггера.
Я использую SQL ниже, извиняюсь за ужасное имя временной таблицы.
FOR INSERT, UPDATE
AS
BEGIN
SELECT i1.wo_id,
i1.wo_status,
i1.wo_link_type,
i1.wo_link
INTO #x_MLN16901
FROM inserted AS i1
WHERE i1.wo_status = 7
DELETE
FROM #x_MLN16901
WHERE #x_MLN16901.wo_id IN
(
SELECT d1.wo_id
FROM deleted AS d1
WHERE d1.wo_status <> 7 OR
d1.wo_link_type <> 'PM'
) OR
#x_MLN16901.wo_id IN
(
SELECT i2.wo_id
FROM inserted AS i2
WHERE i2.wo_link_type <> 'PM'
)
IF (SELECT COUNT(*) FROM #x_MLN16901) = 0
RETURN
UPDATE workorders
SET workorders.wo_action_date = GETDATE()
WHERE workorders.wo_id IN
(
SELECT wo_id
FROM #x_MLN16901
)
Я понимаю, что это последнее заявление об обновлении является куприлом, но я не могу придумать способ сделать это по-другому или лучший способ перехватить цикл в начале триггера.
Я играю над идеей использования глобальной временной таблицы и проверки вставленной записи, установленной при запуске триггера, при выходе из триггера, если строки уже существуют в глобальной временной таблице. Коллеги уверяют меня, что это, вероятно, излишне усложняет ситуацию и либо не сработает, либо существует более простой ответ?
Любая помощь очень ценится.
Tommy