web-dev-qa-db-ja.com

T-SQLのTRYとRAISERROR

小さな問題があり、これらを正しく使用しているかどうか疑問に思っています。

私の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

ただし、これでエラーが発生し、スクリプトの残りの部分を続行します。何が足りないのですか?ありがとう!

20
StevenMcD

これは、RAISERRORの重大度が十分に高くなく、説明されているように11から19の間である必要があるためです ここ

例えば.

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

キャッチするには、重大度レベルが10を超えるエラーを発生させる必要があると思います。

RAISERROR ('Errors found', 11, 2) WITH SETERROR
12
Alex Peck

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
5
Jim Carnicelli