SQL Server代理错误处理 - 尝试,事务,捕获

时间:2017-03-15 10:30:38

标签: sql-server tsql transactions jobs agent

我正在使用MS SQL Server尝试将一些数据从我们的实时环境移动到存档区域。我编写了我的代码,它是这样的:

BEGIN TRY
    BEGIN TRANSACTION
        copy data to archive
        another step to change data in a different table
        delete archived data from original source
    COMMIT
END TRY
BEGIN CATCH
    ROLLBACK
END CATCH

这一切看起来很好并且正常工作,无论是提交还是按照我的预期进行回滚,当我拥有我的代码并将其作为脚本运行时(F5)。

我现在正在做的是将其设置为每天运行的SQL Server代理作业。

通常情况下,我会在失败时发送通知,但是我想知道TRY / CATCH子句是否意味着SQL Server作业始终认为脚本已成功运行,因此不会报告失败。< / p>

如果作业遇到回滚声明,作业是否会报告失败?

在ROLLBACK之后是否可以插入一些内容来说明失败而不是结束CATCH?

如果我从代码中删除TRY / CATCH,我确定该作业会报告失败,但我怀疑它会回滚任何更改。我不希望发生的是工作报告失败,但是过程已经中途退出而没有回滚。

作业是否会在失败时自动回滚,如果没有,我可以添加什么来让它在faillure上回滚?

我是否可以在其中仅使用ROLLBACK在作业中设置不同的步骤并结束该步骤报告失败?这一步会不会知道我正在回滚上一步发生的事情?

0 个答案:

没有答案