Gunakan CONTEXT_INFO (Transact-SQL) . Dalam prosedur, tetapkan nilai untuk memperingatkan pemicu agar tidak merekam apa pun:
--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
Di pemicu, periksa CONTEXT_INFO dan tentukan apakah Anda perlu melakukan sesuatu:
--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
bagi siapa pun yang hanya melakukan penyisipan/pembaruan/penghapusan nakal, mereka tidak akan mengatur CONTEXT_INFO dan pemicu akan merekam perubahan. Anda bisa menyukai nilai yang Anda masukkan ke CONTEXT_INFO, seperti nama tabel atau @@SPID, dll. jika menurut Anda kode jahat akan mencoba menggunakan CONTEXT_INFO juga.