Använd CONTEXT_INFO (Transact-SQL) . I proceduren ställ in ett värde för att varna utlösaren för att inte spela in något:
--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 triggern kontrollera CONTEXT_INFO och avgör om du behöver göra något:
--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
för alla som bara gör en falsk infogning/uppdatering/borttagning kommer de inte att ha ställt in CONTEXT_INFO och utlösaren kommer att registrera ändringen. Du kan bli fancy med värdet du lägger in i CONTEXT_INFO, som tabellnamnet eller @@SPID, etc. om du tror att den falska koden kommer att försöka använda CONTEXT_INFO också.