有一个小问题,想知道我是否正确使用这些。
在我的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
但是,这会遇到错误,然后继续执行脚本的其余部分。我错过了什么?谢谢!
答案 0 :(得分:35)
这是因为RAISERROR的严重程度不够高,需要在11到19之间,如here所述
e.g。
RAISERROR ('Errors found, please fix these errors and retry', 16, 2) WITH SETERROR
答案 1 :(得分:12)
我认为你需要提出一个严重程度高于10的错误才能被捕获,例如。
RAISERROR ('Errors found', 11, 2) WITH SETERROR
答案 2 :(得分:5)
来自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