我有一些具有以下模式的TSQL代码:
BEGIN TRAN;
DECLARE @Set int;
BEGIN TRY
SET @Set = dbo.UDFThatCanTriggerAnError('ByCastingTheDescriptiveErrorToInt');
END TRY
BEGIN CATCH
SET @Set = -1; --Default value;
END CATCH
--Really in another sproc called from here but shown here for brevity
SAVE TRAN Testing;
ROLLBACK TRAN Testing;
--Back to the original sproc
ROLLBACK TRAN;
(实际上只有在sprocs中存在进一步的错误时才会触发回滚,但希望这可以提供这个想法。)
在SQL Server 2008 R2 SP1上进行测试时,事务保存操作会一直抛出错误: 当前事务无法提交,也无法支持写入日志文件的操作。回滚交易。
如果我将UDF调用更改为不引发错误的调用,或者使用不同的设置变量的方式替换该行,则代码完成。
如果那么更容易,如果这里的TRY..CATCH块可以像.Net中的类似块一样工作,让我选择重置错误标志,而不是自动假设每个最后的错误都是终端 - 这个肯定不是,并且比任何替代控制流的方式都少得多。
那么 - 有没有办法重置Catch块内的错误状态,还是我需要重写逻辑以避免首先抛出捕获的错误?