Det beror på rekursionsnivån för triggers som för närvarande är inställda på DB.
Om du gör detta:
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
Eller det här:
ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF
Den utlösaren ovan kommer inte att anropas igen, och du skulle vara säker (såvida du inte hamnar i någon form av dödläge; det kan vara möjligt men jag kanske har fel).
Ändå gör jag inte det tycker att detta är en bra idé. Ett bättre alternativ skulle vara att använda en I STÄLLET FÖR trigger . På så sätt skulle du undvika att utföra den första (manuella) uppdateringen över DB. Endast den som definierats inuti utlösaren skulle exekveras.
En utlösare I STÄLLET FÖR INSERT skulle vara så här:
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
Detta skulle automagiskt "ersätta" den ursprungliga INSERT-satsen med den här, med ett explicit UPPER-anrop applicerat på part_description
fältet.
En utlösare I STÄLLET FÖR UPPDATERING skulle vara liknande (och jag råder dig inte att skapa en enda utlösare, håll dem åtskilda).
Detta adresserar också @Martin-kommentaren:det fungerar för infogning/uppdateringar med flera rader (ditt exempel gör det inte).