Brug CONTEXT_INFO (Transact-SQL) . Indstil en værdi i proceduren for at advare triggeren om ikke at registrere noget:
--in the procedure doing the insert/update/delete
DECLARE @CONTEXT_INFO varbinary(128)
SET @CONTEXT_INFO =cast('SkipTrigger=Y'+REPLICATE(' ',128) as varbinary(128))
SET CONTEXT_INFO @CONTEXT_INFO
--do insert/update/delete that will fire the trigger
SET CONTEXT_INFO 0x0
I triggeren skal du kontrollere CONTEXT_INFO og afgøre, om du skal gøre noget:
--here is the portion of the trigger to retrieve the value:
IF CAST(CONTEXT_INFO() AS VARCHAR(128))='SkipTrigger=Y'
BEGIN
--log your data here
END
for alle, der bare laver en falsk indsættelse/opdatering/sletning, vil de ikke have indstillet CONTEXT_INFO, og udløseren vil registrere ændringen. Du kan blive fancy med den værdi, du lægger i CONTEXT_INFO, som f.eks. tabelnavnet eller @@SPID osv., hvis du tror, at slyngelkoden også vil forsøge at bruge CONTEXT_INFO.