Závisí to na úrovni rekurze pro spouštěče aktuálně nastavené v DB.
Pokud uděláte toto:
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
Nebo toto:
ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF
Výše uvedený spouštěč nebude znovu vyvolán a budete v bezpečí (pokud se nedostanete do nějaké slepé uličky; to by mohlo být možné, ale možná se mýlím).
Přesto nemám myslím, že je to dobrý nápad. Lepší možností by bylo použití MÍSTO spouštěče . Tímto způsobem byste se vyhnuli provádění první (ruční) aktualizace přes DB. Bude spuštěn pouze ten, který je definován uvnitř spouštěče.
Spouštěč MÍSTO INSERT by vypadal takto:
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
To by automaticky "nahradilo" původní příkaz INSERT tímto příkazem s explicitním voláním UPPER aplikovaným na part_description
pole.
Spouštěč MÍSTO AKTUALIZACE by byl podobný (a nedoporučuji vám vytvořit jediný spouštěč, nechte je oddělené).
Také se to týká komentáře @Martin:funguje to pro víceřádkové vložení/aktualizace (váš příklad ne).