Ответ 1
Это потому, что тяжесть RAISERROR недостаточно высока, должна быть между 11 и 19, как описано здесь
например.
RAISERROR ('Errors found, please fix these errors and retry', 16, 2) WITH SETERROR
Имея небольшую проблему и задаемся вопросом, правильно ли я использую ее.
В моем 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. Что мне не хватает? Спасибо!
Это потому, что тяжесть 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