【发布时间】:2014-09-25 16:03:12
【问题描述】:
每当在 CUSTOMER 表中发生 INSERT 时,我需要调用“StoredProcedure1”和 更新发生在客户表中,我需要在触发器中调用“StoredProcedure2”。 如何确定是在触发器中插入还是更新来自 SQL Server 2008。
有人可以帮我解决一下吗?
代码:
CREATE TRIGGER Notifications ON CUSTOMER
FOR INSERT,UPDATE
AS
BEGIN
DECLARE @recordId varchar(20);
set @recordId= new.Id;
//if trigger is insert at the time I call to SP1
EXEC StoredProcedure1 @recordId
//if trigger is Upadeted at the time I call to SP2
EXEC StoredProcedure2 @recordId
END
【问题讨论】:
-
不建议使用一次必须执行一行的触发调用程序。真的很伤演技。为什么不将 SP 逻辑移到触发器中??
-
这里有几件真正重要的事情。首先,您永远不应该在从插入或删除的值填充的触发器中使用标量变量。 sql server 中的触发器每次操作触发一次,您的触发器需要处理多行操作。其次,如果您需要与更新不同的插入逻辑,请创建两个触发器。一种用于每种类型的操作。
-
我需要给客户发邮件
-
不要在触发器中发送电子邮件。您会将系统速度降低到令人难以置信的低水平。在这种情况下,您应该做的是使用触发器来填充队列表,以便 dml 语句可以更快。然后让另一个进程提取额外表中的行并相应地处理它们。
标签: sql-server triggers