Sql server 2008 存储过程错误';s,然后触发最后一节

Sql server 2008 存储过程错误';s,然后触发最后一节,sql-server-2008,stored-procedures,Sql Server 2008,Stored Procedures,我有一个更新表的存储过程,非常标准的insert查询,并且所讨论的表有一个约束,以确保没有重复的数据可以进入,当使用重复的数据执行该过程时,它是正确的,但是该过程的最后一步执行一个电子邮件存储过程。即使插入失败,也会发送电子邮件?我以为程序会因为插入错误而停止 否-这取决于错误的严重程度。如果严重性小于11,则默认情况下SQL server将继续 我发现这篇文章似乎很好地解释了这一点: 如果我是你,我会确保存储过程在事务中使用try/catch块执行所有操作 乙二醇 约束冲突的严重性确实大于11

我有一个更新表的存储过程,非常标准的insert查询,并且所讨论的表有一个约束,以确保没有重复的数据可以进入,当使用重复的数据执行该过程时,它是正确的,但是该过程的最后一步执行一个电子邮件存储过程。即使插入失败,也会发送电子邮件?我以为程序会因为插入错误而停止

否-这取决于错误的严重程度。如果严重性小于11,则默认情况下SQL server将继续

我发现这篇文章似乎很好地解释了这一点:

如果我是你,我会确保存储过程在事务中使用try/catch块执行所有操作

乙二醇

约束冲突的严重性确实大于11。但它只终止语句,而不终止范围或批处理。看见
BEGIN TRAN
BEGIN TRY
  -- Do insert

  -- send email
END TRY
BEGIN CATCH
  IF @@TRANCOUNT > 0 ROLLBACK TRAN
END CATCH
IF @@TRANCOUNT > 0 COMMIT TRAN