在T-SQL 2005中,如何在删除之前触发触发器?

在T-SQL 2005中,如何在删除之前触发触发器?,sql,sql-server-2005,tsql,Sql,Sql Server 2005,Tsql,在T-SQL 2005中,如何在删除之前触发触发器? FOR实际上在事件之后激发,并且在触发器函数中似乎没有BEFORE参数。 取而代之的不是我想要的。 我需要在删除记录之前先开火。 有什么想法吗?你不能。但您可以在删除后触发器中执行回滚。您不能。您可以做的是检查删除表,并在需要时撤消删除 以下是事件的顺序: 向SQL Server发送删除命令 项目已从表中删除 OnDelete触发器触发执行您的 逻辑如果逻辑失败/通过/无论什么,撤消删除 您可以使用替代选项,只需显式删除末尾的行即可。例如:

在T-SQL 2005中,如何在删除之前触发触发器? FOR实际上在事件之后激发,并且在触发器函数中似乎没有BEFORE参数。 取而代之的不是我想要的。 我需要在删除记录之前先开火。
有什么想法吗?

你不能。但您可以在删除后触发器中执行回滚。

您不能。您可以做的是检查删除表,并在需要时撤消删除

以下是事件的顺序:

  • 向SQL Server发送删除命令
  • 项目已从表中删除
  • OnDelete触发器触发执行您的
  • 逻辑如果逻辑失败/通过/无论什么,撤消删除

您可以使用替代选项,只需显式删除末尾的行即可。例如:

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组成。

谢谢Tom、Mitch和Steven这对“删除前”的最常见用例没有帮助触发器-级联删除-这让我对删除时的操作感到困惑。我通常使用OnDelete触发器创建一个历史记录条目,其中某个元素在给定时间被用户删除。不依赖于应用程序行为的自定义审核。我喜欢+一个好主意。这不是又一次扣动扳机吗?