Estou adicionando uma etapa no meu trabalho SQL em que ele faz uma verificação WHILE EXISTS para mim antes de executar a última etapa. O que ele faz é esperar 15 minutos para ver se a tabela que estou verificando foi preenchida com dados de data e hora, para ter os dados de data e hora corretos, ela deve ser maior que meia-noite. Se for maior que meia-noite, vou em frente e passo para a última etapa. Mas eu estava preso para adicionar um mecanismo de tratamento de erros para fechar a etapa com erro depois de tentar por um tempo por 15 minutos ... Aqui está a consulta abaixo:
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
Então eu comecei com isso, mas fiquei preso descobrindo o tratamento de erros/como gerar um erro,
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
Você só entrará no "Catch" se o "waitFor Delay" falhar (o que é improvável de acontecer).
Se você deseja gerar um alerta/erro toda vez que ele espera 15 min, então o "raiserror" deve ser colocado logo antes/depois do seu WAITFOR.
Você pode conferir esta página para obter informações sobre o comando "Raiserror": https://learn.microsoft.com/en-us/sql/t-sql/language-elements/raiserror-transact-sql?view=sql- servidor-ver16
Tenha cuidado com a gravidade, pois algum erro encerrará a execução do script.
Então, se você quiser que seu código pare e envie um erro após 3h, ficaria assim:
loops diferentes
Faria mais sentido para mim usar um loop WHILE para verificar quando a hora atual é inferior a três horas no futuro e gerar um erro quando essa condição se tornar verdadeira.