触发器不应阻止插入

Ezi*_*Ezi 6 trigger sql-server

我在插入时有一个触发器,但如果触发器失败,插入也会失败。

即使触发器失败,有没有办法让插入继续进行?

编辑:当输入新记录时,我使用触发器发送电子邮件。无论电子邮件是否已发送,我都希望保存记录。

我将如何从 sp 做到这一点?

gbn*_*gbn 10

  • 触发器是事务的一部分
  • 错误将中止 INSERT 语句(如果不是在显式事务中)
  • 触发器中的错误将导致事务失败(即必须回滚)
  • 使用TRY/CATCH 块的触发器中的错误(也围绕 INSERT)将中止批处理

不要使用触发器。使用存储过程将逻辑与 INSERT 分离。

就个人而言,触发器失败意味着某些复杂的 DRI 失败或者我无法写入历史记录表。那是件坏事...

编辑:

  • 使用 Service Broker 从触发器发送通知。
  • 另一段代码会捡起来异步发送

我还没有实现自己,所以我必须把你推荐给谷歌


dat*_*god 5

如果您对 Service Broker 不满意,您仍然可以使用触发器,但它不会发送电子邮件,而是将电子邮件的内容插入到某种 EmailQueue 表中。然后,您将有一个异步进程定期检查该表并单独处理电子邮件,在发送时将它们从队列中删除。

将邮件的生成与邮件的发送解耦将防止插入失败,并允许您在捕获要发送的新邮件的同时解决邮件问题。