Остановить хранимую процедуру от дальнейшего выполнения, если условие нарушено? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть следующая хранимая процедура, и я хочу прервать ее, если количество строк в таблице фактов не похоже на исторические данные.Так что я пытаюсь сделать что-то вроде, до сих пор он только отправляет электронное письмо пользователям, что данные не совпадают, но я хочу добавить еще одну функцию, то есть, чтобы прервать / остановить 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?Как только условие нарушается?И перейти к «ИЛИ», если условие не выполняется?

1 Ответ

2 голосов
/ 25 сентября 2019

Ваш синтаксис повсюду.Использование некоторого форматирования для большей ясности поможет значительно.Также в вашем коде есть анти-шаблон, который я называю 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
...