你好可以在Trigger Body上的DML命令/操作(插入,删除,更新)之间切换吗?我尝试使用一些T-sql来更好地理解我:
CREATE TRIGGER DML_ON_TABLEA ON TABLEA AFTER INSERT,DELETE,UPDATE AS BEGIN SET NOCOUNT ON; CASE WHEN (INSERT) THEN -- INSERT ON AUX TABLEB WHEN (DELETE) THEN -- DELETE ON AUX TABLEB ELSE --OR WHEN (UPDATE) THEN -- UPDATE ON AUX TABLEB END END GO
谢谢,
解决方法
我将向您展示一种在sql Server 2000或2005中检查此问题的简单方法(您忘记提及您正在使用的版本),但总的来说我同意Remus您应该将它们分解为单独的触发器:
DECLARE @i INT,@d INT; SELECT @i = COUNT(*) FROM inserted; SELECT @d = COUNT(*) FROM deleted; IF @i + @d > 0 BEGIN IF @i > 0 AND @d = 0 BEGIN -- logic for insert END IF @i > 0 AND @d > 0 BEGIN -- logic for update END IF @i = 0 AND @d > 0 BEGIN -- logic for delete END END
请注意,由于MERGE在sql Server 2008中引入了复杂性,因此可能无法完全向前兼容.有关详细信息,请参阅此Connect项:
> MERGE can cause a trigger to fire multiple times
因此,如果您计划将来使用sql Server 2008和MERGE,那么这更有理由将触发器分解为每种类型的DML操作的触发器.
(如果你想要更多理由避免MERGE,read this.)
原文地址:https://www.jb51.cc/mssql/78138.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。