为什么当步骤中出现错误时,SQL 代理作业不会失败?

Why is the SQL Agent job not failing when there's an error in a step?

提问人:Thilini 提问时间:11/15/2023 最后编辑:XedniThilini 更新时间:11/15/2023 访问量:26

问:

我的 2019 服务器中有几个计划的 SQL 代理作业。每个 job-One 存储过程(我通常称之为容器)都由几个类似于下面的存储过程组成。

SQL_Agent_Job_1

Create Procedure SQL_Agent_Job_1 as
BEGIN
    exec Stored_proc1
    exec Stored_proc2
    exec Stored_proc3
    exec Stored_proc4
END

SQL_Agent_Job_2

Create Procedure SQL_Agent_Job_2 as
BEGIN
    exec Stored_proc5
    exec Stored_proc6
    exec Stored_proc7
    exec Stored_proc8
END

如果作业在任一步骤中立即遇到错误,我需要作业失败,例如,如果作业 1 在 StoredProc2 中遇到数据溢出错误,我希望作业 1 在不执行 StoredProc3 和 4 的情况下失败。我的一份工作就是这种情况,但在少数工作中却不是这样。

因此,作业 2 即使 StoredProc6 中存在无效的列名错误,并且无法完成它应该完成的所有操作(例如将某些行插入到表中),也会忽略该操作,然后移动到 StoredProc7 和 8,然后生成错误,作业 2 失败。这使得很难跟踪作业在哪个点失败。

我想了解导致此行为的原因,以及应该进行哪些更改才能使作业在遇到错误时立即失败。

sql-server 存储过程 sql-agent 作业 sched

评论

0赞 Xedni 11/15/2023
将您的调用包装在 try/catch 块中,并相应地处理错误。如果您希望它在出现错误时停止,请在 catch 块中抛出异常。如果你想让它静默地继续,就不要。
3赞 Stu 11/15/2023
为什么不直接按照自己的步骤执行每个过程。
0赞 Charlieface 11/15/2023
用于强制立即批量流产。SET XACT_ABORT ON;

答: 暂无答案