在带触发器的表中插入记录而不触发触发器

时间:2015-11-26 17:07:48

标签: c# sql-server triggers

我正在做一个更新SQL Server 2012中记录的c#。问题是:

记录表有一个触发器,可以更新一个我不想更新的字段(在这种情况下,因为我会手动添加)。

触发器是这样的:

ALTER TRIGGER [dbo].[TriggerName]
ON [dbo].[TableName]
AFTER UPDATE

因此,在我更新后,触发器跳转并重写我的更新。

有没有办法避免触发?

我知道我可以更改"更新后#34; for" INSTEAD UPDATE"但我更愿意,如果有任何方式没有触及触发器(我会做,如果是唯一的机会)

谢谢你的时间!

1 个答案:

答案 0 :(得分:2)

有几个选择。

<强> 1。禁用特定SQL语句的触发器:

请点击以下链接。我自己从来没有实施过这种方法,所以对它没什么好说的。 https://www.mssqltips.com/sqlservertip/1591/disabling-a-trigger-for-a-specific-sql-statement-or-session/

<强> 2。添加列/属性:在表格中添加一列名为run_trigger的列或其他内容。更新触发器,以便在新列中设置值时不运行。

如果您在其他查询和存储过程中使用SELECT *检索数据,则会很危险。理想情况下,您不应在程序或存储过程中使用SELECT *

第3。触发后更新字段: 更新触发器仅在更新特定列时执行(即,在更新要设置的列时不运行触发器)。运行第一个查询,然后手动更新/重置该值。

这不是理想的,因为你多跑了2倍以上,可能会导致任何审核日志看起来有点搞笑。

此解决方案可能不可行,具体取决于在仅更新一列时是否应在正常情况下运行触发器。

<强> 4。禁用/启用触发器: 您可以禁用然后重新启用触发器。

ALTER TABLE <table> DISABLE TRIGGER <trigger>;
ALTER TABLE <table> ENABLE TRIGGER <trigger>;

如果在重新启用触发器之前没有/保持对表的锁定,这可能会很危险。禁用触发器会打开数据损坏的大门。除非您在重新启用触发器之前锁定表,否则请勿使用此方法。