一旦违反条件,停止存储过程进一步执行?

Stop a stored procedure from further execution once the condition is violated?

我有一个存储过程,一旦行数 table 与历史数据不相似,我想中止它。所以我正在尝试做类似的事情,直到现在它只向用户发送数据不相同的电子邮件,但我想添加另一个功能,即如果行差异更大,则 abort/stop SP超过 5%。但它不能正常工作。谁能解释我在哪里犯了错误?以下是我正在修改的存储过程块:

SET XACT_ABORT ON;

Begin Try

    Begin Transaction;

    if (@delta_ok = 0)

        set @email_body = @email_body+char(13)+char(10)+'ETL process has been stopped.'

    Return

    else

        set @email_body = @email_body+char(13)+char(10)+'ETL process is copying the data .'

    Commit Transaction;

    Begin Catch

        Rollback Transaction

    End Catch

End Try

所以我的问题是,如果将 "RETURN" 放在 "if" 语句中,它会停止 SP 吗?一旦违反条件?如果不满足条件,则传递给 "ELSE"?

这里到处都是你的语法。使用一些格式来增加清晰度将大有帮助。你的代码中还有一个反模式,我称之为 Try/Squelch。你发现了一个错误,但随后你吞下了它并且不告诉任何人它发生了。当异常发生时,您需要处理它们。这意味着您需要告诉调用程序出了什么问题,而不仅仅是静静地吸收详细信息,这样没人知道它发生了或如何修复它。

Begin Try
    Begin Transaction;

    if (@delta_ok = 0)
        begin
            set @email_body = @email_body + char(13) + char(10) + 'ETL process has been stopped.'
            Return
        end
    else
        begin
            set @email_body = @email_body + char(13) + char(10) + 'ETL process is copying the data .'
            Commit Transaction;
        end
End Try

Begin Catch
    Rollback Transaction
    --you really need something here to log/audit and probably tell the calling program something failed.
End Catch