我在我的 SQL 作业中添加了一个步骤,它在执行最后一步之前对我进行 WHILE EXISTS 检查。它的作用是等待 15 分钟以查看我正在检查的表是否已填充日期时间数据,以便获得正确的日期时间数据,它应该大于午夜。如果它大于午夜,我将继续前进并移至最后一步。但我坚持添加一个错误处理机制,在尝试了 15 分钟后关闭错误步骤......这是下面的查询:
WHILE EXISTS ( SELECT * FROM ETLTimeCheck WHERE EXEC_END_TIME is NULL OR EXEC_END_TIME > DATEADD(D,0,DATEDIFF(D,0,GETDATE())))
BEGIN
WAITFOR DELAY '00:15:00'
END
所以我从这个开始,但在弄清楚错误处理/如何引发错误时遇到了困难,
WHILE EXISTS ( SELECT * FROM ETLTimeCheck WHERE EXEC_END_TIME is NULL OR EXEC_END_TIME > DATEADD(D,0,DATEDIFF(D,0,GETDATE())))
BEGIN
BEGIN TRY
WAITFOR DELAY '00:15:00'
END TRY
END
BEGIN CATCH
-- The Error Message
END CATCH
如果“waitFor Delay”失败(这不太可能发生),您只会进入“Catch”。
如果您想在每次等待 15 分钟时发出警报/错误,那么“raiserror”应该放在您的 WAITFOR 之前/之后。
您可以查看此页面以获取有关“Raiserror”命令的信息:https ://learn.microsoft.com/en-us/sql/t-sql/language-elements/raiserror-transact-sql?view=sql-服务器-ver16
请注意严重性,因为某些错误将结束脚本执行。
所以如果你想让你的代码在 3 小时后停止并发送一个错误,它看起来像这样:
不同的循环
对我来说,使用 WHILE 循环来检查当前时间何时小于未来三个小时,并在该条件为真时引发错误会更有意义。