小さな問題があり、これらを正しく使用しているかどうか疑問に思っています。
私の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
ただし、これでエラーが発生し、スクリプトの残りの部分を続行します。何が足りないのですか?ありがとう!
これは、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