T-SQL中的TRY和RAISERROR

时间:2009-07-15 13:28:39

标签: tsql error-handling 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

但是,这会遇到错误,然后继续执行脚本的其余部分。我错过了什么?谢谢!

3 个答案:

答案 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