我正在做一个更新SQL Server 2012中记录的c#。问题是:
记录表有一个触发器,可以更新一个我不想更新的字段(在这种情况下,因为我会手动添加)。
触发器是这样的:
ALTER TRIGGER [dbo].[TriggerName]
ON [dbo].[TableName]
AFTER UPDATE
因此,在我更新后,触发器跳转并重写我的更新。
有没有办法避免触发?
我知道我可以更改"更新后#34; for" INSTEAD UPDATE"但我更愿意,如果有任何方式没有触及触发器(我会做,如果是唯一的机会)
谢谢你的时间!
答案 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>;
如果在重新启用触发器之前没有/保持对表的锁定,这可能会很危险。禁用触发器会打开数据损坏的大门。除非您在重新启用触发器之前锁定表,否则请勿使用此方法。