Zależy to od poziomu rekurencji dla wyzwalaczy aktualnie ustawionych w DB.
Jeśli to zrobisz:
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
Albo to:
ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF
Powyższy wyzwalacz nie zostanie ponownie wywołany i będziesz bezpieczny (chyba że wpadniesz w jakiś rodzaj impasu; to może być możliwe, ale może się mylę).
Mimo to nie myślę, że to dobry pomysł. Lepszym rozwiązaniem byłoby użycie INSTEAD OF wyzwalacza . W ten sposób unikniesz wykonywania pierwszej (ręcznej) aktualizacji przez bazę danych. Zostanie wykonany tylko ten zdefiniowany wewnątrz wyzwalacza.
Wyzwalacz ZAMIAST INSERT wygląda tak:
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 automagicznie "zamieniłoby" oryginalną instrukcję INSERT na tę, z wyraźnym wywołaniem UPPER zastosowanym do part_description
pole.
Wyzwalacz INSTEAD OF UPDATE byłby podobny (i nie radzę tworzyć jednego wyzwalacza, trzymaj je osobno).
Odnosi się to również do komentarza @Martin:działa dla wielowierszowych wstawek/aktualizacji (w twoim przykładzie nie działa).