ПОПРОБУЙТЕ И ПОДБОРНИК в T-SQL

У меня небольшая проблема и мне интересно, правильно ли я их использую.

В моем сценарии SQL есть

BEGIN TRY
    // check some information and if there are certains errors
    RAISERROR ('Errors found, please fix these errors and retry', 1, 2) WITH SETERROR

    // Complete normal process if no errors encountered above
    PRINT 'IMPORT SUCCEEDED'
END TRY
BEGIN CATCH
    PRINT 'IMPORT ABORTED. ERRORS ENCOUNTERED'
END CATCH

Тем не менее, это происходит с ошибкой и затем продолжается с остальной частью сценария. Что мне не хватает? Спасибо!

3 ответа

Решение

Это потому, что серьезность RAISERROR недостаточно высока, она должна быть между 11 и 19, как описано здесь

например

RAISERROR ('Errors found, please fix these errors and retry', 16, 2) WITH SETERROR

Я думаю, вам нужно поднять ошибку с уровнем серьезности выше 10, чтобы ее можно было перехватить, например

RAISERROR ('Errors found', 11, 2) WITH SETERROR

Из MSDN


строгость

Определяемый пользователем уровень серьезности, связанный с этим сообщением. Уровни серьезности от 0 до 18 могут использоваться любым пользователем. Уровни серьезности от 19 до 25 используются только членами предопределенной роли сервера sysadmin. Для уровней серьезности от 19 до 25 требуется опция WITH LOG.

Осторожность Уровни серьезности от 20 до 25 считаются смертельными. Если обнаружен неустранимый уровень серьезности, клиентское соединение прерывается после получения сообщения, и ошибка регистрируется в журнале ошибок и журнале приложения.


Попробуйте это вместо этого:

RAISERROR ('Errors found, please fix these errors and retry', 1, 2) WITH SETERROR
RETURN
Другие вопросы по тегам