Это зависит от уровня рекурсии для триггеров, установленных в данный момент в БД.
Если вы сделаете это:
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
Или это:
ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF
Этот вышеупомянутый триггер больше не будет вызываться, и вы будете в безопасности (если только вы не попадете в какой-то тупик; это возможно, но, возможно, я ошибаюсь).
Тем не менее, я не думаю, что это хорошая идея. Лучшим вариантом было бы использовать INSTEAD OF триггер . Таким образом, вы бы не выполняли первое (ручное) обновление через БД. Будет выполнен только тот, который определен внутри триггера.
Триггер INSTEAD OF INSERT будет выглядеть так:
CREATE TRIGGER setDescToUpper ON part_numbers
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO part_numbers (
colA,
colB,
part_description
) SELECT
colA,
colB,
UPPER(part_description)
) FROM
INSERTED
END
GO
Это автоматически "заменит" исходный оператор INSERT на этот, с явным вызовом UPPER, примененным к полю part_description
.
Триггер INSTEAD OF UPDATE будет похож (и я не советую вам создавать один триггер, держите их отдельно).
Кроме того, это адрес @Martin comment: он работает для многорядных вставок / обновлений (ваш пример - нет).