Dipende dal livello di ricorsione per i trigger attualmente impostati sul DB.
Se lo fai:
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
O questo:
ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF
Quel trigger sopra non verrà chiamato di nuovo e saresti al sicuro (a meno che tu non entri in una sorta di stallo; potrebbe essere possibile ma forse mi sbaglio).
Tuttavia, io non pensa che questa sia una buona idea. Un'opzione migliore sarebbe utilizzare un INVECE DI trigger . In questo modo eviterai di eseguire il primo aggiornamento (manuale) sul DB. Verrebbe eseguito solo quello definito all'interno del trigger.
Un trigger INSTEAD OF INSERT sarebbe come questo:
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
Questo "sostituirebbe" automaticamente l'istruzione INSERT originale con questa, con un'esplicita chiamata UPPER applicata alla part_description
campo.
Un trigger INSTEAD OF UPDATE sarebbe simile (e non ti consiglio di creare un trigger singolo, tienili separati).
Inoltre, questo indirizza il commento di @Martin:funziona per inserimenti/aggiornamenti multiriga (il tuo esempio no).