在不触发触发器的情况下,在带有触发器的表中插入记录
本文关键字:触发器 记录 插入 情况下 | 更新日期: 2023-09-27 18:24:41
我正在执行一个c#,用于更新SQL Server 2012中的记录。问题是:
记录表有一个触发器,用于更新我不想更新的一个字段(在这种情况下,因为我将手动放置它)。
触发器是这样的:
ALTER TRIGGER [dbo].[TriggerName]
ON [dbo].[TableName]
AFTER UPDATE
所以,在我更新后,触发器会跳转并重写我的更新。
有什么办法可以避免触发吗?
我知道我可以将"AFTER UPDATE"改为"INSTEAD UPDATE",但我更希望有任何方法不接触触发器(如果是唯一的机会,我会这样做)
谢谢你抽出时间!
有几个选项。
1.禁用特定SQL语句的触发器:
请点击下面的链接。我自己从来没有实施过这种方法,所以没什么好说的。https://www.mssqltips.com/sqlservertip/1591/disabling-a-trigger-for-a-specific-sql-statement-or-session/
2.添加列/属性:向表中添加一个名为run_trigger
的列或类似的列。将触发器更新为在新列中设置值时不运行。
如果在其他查询和存储过程中使用SELECT *
检索数据,这可能是危险的。理想情况下,您不应该在程序或存储过程中使用SELECT *
。
3.触发后更新字段:更新触发器,使其仅在更新特定列时执行(即,不要在更新要设置的列时运行触发器)。运行第一个查询,然后手动更新/重置值。
这并不理想,因为你再打两次表,可能会导致任何审计日志看起来有点有趣。
此解决方案可能不可行,具体取决于触发器是否应在仅更新一列的正常情况下运行。
4.禁用/启用触发器:您可以禁用触发器,然后再重新启用。
ALTER TABLE <table> DISABLE TRIGGER <trigger>;
ALTER TABLE <table> ENABLE TRIGGER <trigger>;
如果在重新启用触发器之前没有/保持对表的锁定,则这可能是危险的。禁用触发器会打开数据损坏的大门。除非在重新启用触发器之前可以锁定表,否则不要使用此方法。