Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Triggerschleife

Ich empfehle nicht, den Trigger während der Verarbeitung explizit zu deaktivieren - dies kann seltsame Nebeneffekte verursachen.

Der zuverlässigste Weg, um Zyklen in einem Trigger zu erkennen (und zu verhindern), ist die Verwendung von CONTEXT_INFO() .

Beispiel:

CREATE TRIGGER tr_Table1_Update
ON Table1
FOR UPDATE AS

DECLARE @ctx VARBINARY(128) 
SELECT @ctx = CONTEXT_INFO() 
IF @ctx = 0xFF
    RETURN

SET @ctx = 0xFF

-- Trigger logic goes here

Siehe diesen Link für ein ausführlicheres Beispiel.

Hinweis zu CONTEXT_INFO() in SQL Server 2000:

Kontextinformationen werden unterstützt, aber anscheinend CONTEXT_INFO Funktion nicht. Sie müssen stattdessen Folgendes verwenden:

SELECT @ctx = context_info
FROM master.dbo.sysprocesses
WHERE spid = @@SPID