一旦违反条件,停止存储过程进一步执行?
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
我有一个存储过程,一旦行数 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