Stringe超时触发错误

时间:2017-04-14 12:37:48

标签: sql-server database-trigger timeoutexception raiserror

我在sql server数据库中有一个非常奇怪的行为触发器,这些都是奇怪的指示:

...
EXEC  [ope].[spMissionDepartment] @AircraftId = @vnAircraftId

RAISERROR('test error', 16, 1)

END TRY 
BEGIN CATCH
    SELECT @ErrorMessage = ERROR_MESSAGE()

    ROLLBACK TRANSACTION

    RAISERROR(@ErrorMessage, 16, 1) -- strange line

END CATCH

奇怪的行为是这样的:
如果我删除奇怪的行而不是我在网页上收到的错误

  

TIMEOUT EXPIRED。在完成操作或服务器之前暂停的超时时间是没有响应。

否则,如果我删除奇怪的行,我会收到错误

  

测试错误

没有其他触发器,所以 exec 应该是最后执行的语句,如果没有 Raiserror ,我怎么可能收到超时?

1 个答案:

答案 0 :(得分:0)

错误不受TRY ... CATCH构造的影响 TRY ... CATCH构造不会捕获以下条件:

  1. 严重性为10或更低的警告或信息性消息。
  2. 严重性为20或更高的错误,用于停止会话的SQL Server数据库引擎任务处理。如果发生严重性为20或更高且数据库连接未中断的错误,则TRY ... CATCH将处理错误。
  3. 注意事项,例如客户端中断请求或客户端连接断开。
  4. 系统管理员使用KILL语句结束会话时。
  5. 当CATCH块与TRY ... CATCH构造处于相同的执行级别时,它们不会处理以下类型的错误:

    1. 编译阻止批处理运行的错误,例如语法错误。
    2. 语句级重新编译期间发生的错误,例如由于延迟名称解析而在编译后发生的对象名称解析错误。