I have a trigger on a table that fires on updates and adds a record to another table indicating that it needs to be rolled up to an external system. In a few cases I need to dynamically suppress this trigger to prevent circular updates between the two systems. My data access is via LINQ to SQL for the system in question.
The article Disabling a Trigger for a Specific SQL Statement or Session deals with the same problem.
using(DbDataContext dc = new DbDataContext())
{
//Update fields etc...
dc.Connection.Open();
//Set the context_info here within the open connection so that it is in-scope
//for the triggers
dc.ExecuteCommand("SET Context_Info 0x55555");
dc.SubmitChanges();
dc.Connection.Close();
}
CREATE TRIGGER TR_Mock ON dbo.TableForTrigger FOR UPDATE AS DECLARE @Cinfo VARBINARY(128) SELECT @Cinfo = Context_Info() IF @Cinfo = 0x55555 RETURN PRINT 'Trigger Executed' -- Actual code goes here GO
See Also: