20

有一个小问题,想知道我是否正确使用了这些。

在我的 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

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

4

3 回答 3

35

这是因为 RAISERROR 的严重性不够高,需要在 11 到 19 之间,如此处所述

例如

RAISERROR ('Errors found, please fix these errors and retry', 16, 2) WITH SETERROR
于 2009-07-15T13:36:55.673 回答
12

我认为您需要引发严重级别高于 10 的错误才能被捕获,例如

RAISERROR ('Errors found', 11, 2) WITH SETERROR
于 2009-07-15T13:39:32.533 回答
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
于 2009-10-23T15:07:34.233 回答