【问题标题】:TRY and RAISERROR in T-SQLT-SQL 中的 TRY 和 RAISERROR
【发布时间】:2009-07-15 13:28:38
【问题描述】:

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

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

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

【问题讨论】:

  • @FailBoy - 您所询问的问题实际上是特定于 T-SQL 的。如果您可以将答案标题更改为“T-SQL 中的 TRY 和 RAISERROR”,这对社区来说会更清楚。谢谢!
  • 下次我会记住这一点,我看到有人,我想你,已经将标签更改为 tsql :)
  • @FailBoy - 我的意思是改变 title。我无法更改标题,因为我没有编辑权限。
  • 哦对了,我现在跟着,我改标题了

标签: tsql error-handling raiserror


【解决方案1】:

这是因为RAISERROR的严重程度不够高,需要在11到19之间,如here所述

例如

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

【讨论】:

    【解决方案2】:

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

    RAISERROR ('Errors found', 11, 2) WITH SETERROR
    

    【讨论】:

    • 感谢您的回答!我已将 AdaTheDev 的答案标记为正确,因为他包含了一个可供其他人关注的链接。但还是谢谢。投票 +1
    【解决方案3】:

    来自 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多