我有一个更新表的存储过程,非常标准的插入查询,并且有问题的表有一个约束以确保没有重复数据可以进入,当使用重复数据执行该过程时它会出错,但是最后一步proc 执行一个电子邮件存储过程。即使插入失败,电子邮件也会发送?我认为该过程会因插入错误而停止?
问问题
30 次
1 回答
1
不 - 这取决于错误的严重程度。如果严重性小于 11,则默认情况下 SQL 服务器将继续运行。
我发现这篇文章似乎很好地解释了这一点:http: //blog.sqlauthority.com/2012/04/26/sql-server-introduction-to-sql-error-actions-a-primer/
如果我是你,我会确保存储过程正在使用 try/catch 块在事务中执行所有操作。
例如
BEGIN TRAN
BEGIN TRY
-- Do insert
-- send email
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRAN
END CATCH
IF @@TRANCOUNT > 0 COMMIT TRAN
于 2013-10-11T11:29:22.037 回答