2009-02-05 255 views
18

如何在T-SQL 2005的删除之前触发触发器? FOR事实上会在事件后触发,而且在TRIGGER函数中它们看起来没有BEFORE参数。 INSTEAD OF不是我想要的。 我需要在删除记录之前启动。 任何想法?如何在T-SQL 2005的删除之前触发触发器?

+0

谢谢Tom,Mitch和Steven – Fet 2009-02-06 08:47:53

回答

28

您可以使用INSTEAD OF选项,只需在末尾显式删除行即可。例如:

CREATE TRIGGER dbo.My_Table_Delete_Instead_Of_Trigger 
ON dbo.My_Table 
INSTEAD OF DELETE 
AS 
BEGIN 

    -- Do some stuff here 

    DELETE T 
    FROM DELETED D 
    INNER JOIN dbo.My_Table T ON T.PK_1 = D.PK_1 AND T.PK_2 = D.PK_2 
END 

这假定一个主键由列PK_1和PK_2组成。

5

你不能。但是您可以在AFTER DELETE触发器中执行回滚。

0

你不能。你可以做的是检查DELETE表并撤消删除,如果你需要的话。

这里是事件的顺序:

  • 发送DELETE命令到SQL Server
  • 项目从表
  • OnDelete触发器触发如果逻辑未能执行您的
  • 逻辑删除/通行证/什么,撤销删除
+0

这对于“删除之前”触发器最常见的用例没有帮助 - 级联删除 - 这让我对你在删除操作中会做什么感到困惑。 – 2013-05-28 06:39:22

+1

我通常使用OnDelete触发器创建一个元素在给定时间被用户删除的历史记录条目。 – 2013-05-28 14:53:35