在某些情况下禁用更新触发器
答
使用禁用触发语句,然后做你的更新如下
DISABLE TRIGGER Person.uAddress ON Person.Address;
update ....
ENABLE Trigger Person.uAddress ON Person.Address;
答
您应该更改表和触发器。可能的解决方案之一是将列添加到表中,例如Triggered。当你进行“正常”更新时,你应该插入1.如果你需要避免更新,那么触发= 0。触发代码应该是:
IF EXISTS(SELECT * FROM INSERTED WHERE triggered=1)
--here you trigger fired
答
到Dalex的答案类似:
另一种解决方案是增加一列,像Triggered
。在你的触发器中使用这样的东西。
IF NOT UPDATE(Triggered)
BEGIN
RETURN;
END
UPDATE()
仅仅检查,看是否将该柱包括在触发的,而不是无论是否该值被实际改变。如果您想要触发触发器的每个查询都有Triggered = 1
,则会触发。没有这个的查询不会触发触发器。
您可以使用nvarchar列并使用原因字段作为标志和解释。
UPDATE Users
SET Password = ..encrypted_password..,
Reason = 'changed password'
WHERE UserID = ...
,然后如果你更新在登录时lastLogin场
IF NOT UPDATE(Reason)
BEGIN
RETURN;
END
何在,你可能会排除的原因,土族触发器将不会触发。
UPDATE Users
SET LastLogin = getDate()
WHERE UserID = ...
在我的理解中,'disable trigger'会影响其他更新,如果它们同时运行。你必须用桌子锁来包装 – Andomar 2011-05-09 06:15:46