Dies hängt von der Rekursionsebene für Trigger ab, die derzeit in der DB eingestellt sind.
Wenn Sie dies tun:
SP_CONFIGURE 'nested_triggers',0
GO
RECONFIGURE
GO
Oder dies:
ALTER DATABASE db_name
SET RECURSIVE_TRIGGERS OFF
Der obige Auslöser wird nicht erneut aufgerufen, und Sie wären sicher (es sei denn, Sie geraten in eine Art Sackgasse; das könnte möglich sein, aber vielleicht irre ich mich).
Trotzdem nicht denke das ist eine gute idee. Eine bessere Option wäre die Verwendung eines ANSTATT DES Triggers . Auf diese Weise würden Sie vermeiden, das erste (manuelle) Update über die DB auszuführen. Nur der im Trigger definierte wird ausgeführt.
Ein INSTEAD OF INSERT-Trigger würde so aussehen:
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
Dies würde automatisch die ursprüngliche INSERT-Anweisung durch diese ersetzen, wobei ein expliziter UPPER-Aufruf auf die part_description
angewendet wird Feld.
Ein INSTEAD OF UPDATE-Trigger wäre ähnlich (und ich rate Ihnen nicht, einen einzelnen Trigger zu erstellen, halten Sie sie getrennt).
Dies adressiert auch den @Martin-Kommentar:Es funktioniert für mehrzeilige Einfügungen/Aktualisierungen (in Ihrem Beispiel nicht).