Użyj CONTEXT_INFO (Transact-SQL) . W procedurze ustaw wartość ostrzegającą wyzwalacz, aby niczego nie rejestrował:
--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
W wyzwalaczu sprawdź CONTEXT_INFO i określ, czy musisz coś zrobić:
--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
dla każdego, kto po prostu robi nieuczciwe wstawianie/aktualizację/usuwanie, nie ustawi on CONTEXT_INFO, a wyzwalacz zarejestruje zmianę. Możesz zainteresować się wartością, którą umieścisz w CONTEXT_INFO, taką jak nazwa tabeli lub @@SPID itp., jeśli uważasz, że nieuczciwy kod będzie próbował również użyć CONTEXT_INFO.