ПОПРОБУЙТЕ И ПОДБОРНИК в 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