Подтвердить что ты не робот

TRY и RAISERROR в T-SQL

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

В моем SQL script есть

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

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

4b9b3361

Ответ 1

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

например.

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

Ответ 2

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

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

Ответ 3

Из 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