有没有办法在 SQL Server 过程中使用 RAISEERROR 来引发错误,但仍然使过程“完成”成功?
现在我们有一个以 RAISERROR 结尾的过程,它会打印出某些内容的总数 - 这与我们的日志系统相关,因此每当发生引发错误时,它也会将其保存到日志文件中。 然后,我们在 Hangfire 中使用此日志文件来监控任何问题。
但问题是,由于 RAISEERROR 函数,该过程一直显示为“失败”。
代码片段:
IF EXISTS (SELECT 1 FROM @UnprocessedCollaterals)
BEGIN
DECLARE @ErrorMessage NVARCHAR(MAX);
DECLARE @Count int;
SELECT @Count = COUNT(DISTINCT CollUpdProcessPK)
FROM @Unprocessed;
RAISERROR ('Total: %d', 16, 1, @Count);
END;
我尝试这样做:
BEGIN TRY
RAISERROR ('Total: %d', 16, 1, @Count);
END TRY
BEGIN CATCH
END CATCH
但是我相信这只是以 RAISEERROR 没有执行而结束,因为它没有出现在我们的日志中。
也许有不同的方法吗?
主要目标: 让 RAISEERROR 执行,但让 SQL 过程“成功”。
评论中提出了很好的建议。
很明显,我们需要重写整个代码部分以更好地记录错误,但这必须等待我们有更多资源来做到这一点:)
最终的解决方案非常简单。不知道为什么我最初没有想到这一点。 将 RaiseError 的严重性更改为低于 10 可以达到我想要的效果。
谢谢大家!