Det afhænger af rekursionsniveauet for triggere, der aktuelt er indstillet på DB.
Hvis du gør dette:
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
Eller denne:
ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF
Den udløser ovenfor vil ikke blive kaldt igen, og du ville være sikker (medmindre du kommer i en form for dødvande; det kunne være muligt, men måske tager jeg fejl).
Alligevel gør jeg ikke synes det er en god idé. En bedre mulighed ville være at bruge en I STEDET FOR trigger . På den måde ville du undgå at udføre den første (manuelle) opdatering over DB'en. Kun den, der er defineret inde i triggeren, vil blive udført.
En ISTEAD FOR INSERT-trigger ville være sådan her:
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
Dette ville automagisk "erstatte" den originale INSERT-sætning med denne, med et eksplicit UPPER-kald anvendt på part_description
felt.
En I STEDET FOR OPDATERING-trigger ville være ens (og jeg råder dig ikke til at oprette en enkelt trigger, hold dem adskilt).
Dette adresserer også @Martin-kommentaren:det virker for indsættelser/opdateringer med flere rækker (dit eksempel gør det ikke).