如果你在TRY-CATCH块中 - 这个raiserror会将执行转移到catch块,所以如果回滚之后(在try块内),那么它将不会执行。
此外,它将取决于错误的严重性 - 严重性20+终止数据库连接。
一个很好的模式来使用是一样的东西
begin try
begin transaction;
-- do stuff
commit transaction;
end try
begin catch
declare @ErrorMessage nvarchar(max),
@ErrorSeverity int,
@ErrorState int;
select @ErrorMessage = ERROR_MESSAGE() + ' Line ' + cast(ERROR_LINE() as nvarchar(5)), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE();
if @@trancount > 0
rollback transaction;
raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState);
end catch
上错误的严重程度取决于太多。如果你提出了一个自定义错误,如“结果集中有多行”,这不是服务器错误,对你而言只是一个错误,那么你可能想要回滚到哪里,因为这将不会出错试着抓。 – scsimon