ПОПРОБУЙТЕ И ПОДБОРНИК в T-SQL - PullRequest
20 голосов
/ 15 июля 2009

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

В моем скрипте 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 ]

35 голосов
/ 15 июля 2009

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

например.

RAISERROR ('Errors found, please fix these errors and retry', 16, 2) WITH SETERROR
12 голосов
/ 15 июля 2009

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

RAISERROR ('Errors found', 11, 2) WITH SETERROR
5 голосов
/ 23 октября 2009

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