【问题标题】:Create trigger with try...catch in SQL Server 2005在 SQL Server 2005 中使用 try...catch 创建触发器
【发布时间】:2009-02-13 11:05:38
【问题描述】:

我已经实现了以下触发器:

CREATE TRIGGER [OnContactDeleted]
    ON [TABLE].[Contact]
    INSTEAD OF DELETE
    AS 
    BEGIN
        SET NOCOUNT ON
        /*Store contact ID to variable*/
        Update [TABLE].[Account] Set [PrimaryContactID] = null where [TABLE].[Account].[PrimaryContactID] = (Select ContactID from Deleted)
        Delete from [TABLE].[Contact] where [TABLE].[Contact].[ContactID] = (Select ContactID from Deleted)
    END

从另一个表中清除一组外键然后删除当前记录。这样做是因为在删除时将外键设置为 null 不起作用。

我的问题是将这个触发器包装在一个 try...catch 块中,如果发生异常,我可以在其中回滚。这是一种好的做法吗?我应该为这种触发器这样做吗?

谢谢, 杰森

【问题讨论】:

    标签: sql-server-2005 triggers try-catch


    【解决方案1】:

    我宁愿让它失败并让异常在消费者中处理(执行 DELETE 语句的代码)。在此删除的上下文中不应该有任何逻辑原因并触发此操作失败,因此这将是导致失败的外部因素。因此,异常也应该在外部处理。通常 DELETE 也会发生在事务中,所以这就是回滚发生的地方。

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 2015-03-22
      • 2012-11-11
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2013-08-30
      • 1970-01-01
      相关资源
      最近更新 更多