Het hangt af van het recursieniveau voor triggers die momenteel op de DB zijn ingesteld.
Als je dit doet:
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
Of dit:
ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF
Die trigger hierboven zal niet opnieuw worden aangeroepen en je zou veilig zijn (tenzij je in een soort impasse raakt; dat zou mogelijk kunnen zijn, maar misschien heb ik het mis).
Toch niet denk dat dit een goed idee is. Een betere optie zou het gebruik van een IN PLAATS VAN trigger zijn . Op die manier vermijdt u het uitvoeren van de eerste (handmatige) update via de DB. Alleen degene die binnen de trigger is gedefinieerd, wordt uitgevoerd.
Een INSTEAD OF INSERT-trigger zou er als volgt uitzien:
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
Dit zou automatisch de originele INSERT-instructie "vervangen" door deze, met een expliciete UPPER-aanroep toegepast op de part_description
veld.
Een trigger IN PLAATS VAN UPDATE zou vergelijkbaar zijn (en ik raad u niet aan om een enkele trigger te maken, deze gescheiden te houden).
Dit adresseert ook de opmerking van @Martin:het werkt voor inserts/updates van meerdere rijen (uw voorbeeld niet).