【问题标题】:Handling Timeouts inside stored procedures处理存储过程中的超时
【发布时间】:2010-08-25 06:59:43
【问题描述】:

我有一个执行几个查询的存储过程。每个查询都可能因超时而失败。

我还想继续执行其他查询。 这可能吗? try catch 是否适用于超时?

我当然可以为每个查询设置不同的 sps,但这会使应用程序更加复杂。

【问题讨论】:

    标签: sql-server sql-server-2008


    【解决方案1】:

    你是如何运行 SQL 的?

    SQL本身没有超时,所以你描述的问题是不可能的。

    超时总是在连接级别/连接应用程序上处理。 SQL Server 很高兴 SQL 调用持续数小时或数天。

    因此,除非您做一些“有趣”/不寻常的事情,否则 SP 内的查询不会超时 - 调用该过程的连接将超时并因此回滚事务。

    【讨论】:

      【解决方案2】:

      存储过程中的查询不会超时 - 执行存储过程的 sql 批处理超时 - 所以不,您不能“捕获”然后处理超时。

      【讨论】:

        【解决方案3】:

        如果您经常遇到超时,解决方法是调整查询的性能,不要尝试跳过超时并继续下一个查询。

        超时通常是查询设计错误(第 1 原因)、数据库设计错误(第 2 原因)或设备不足的标志。这三个都是可以修复的。所以修复它们。

        【讨论】:

          【解决方案4】:

          简短的回答:不。超时就像您在 SSMS 中取消查询一样:CATCH 不会捕获它。我写了一个罐头答案:Your TRY block may fail, and your CATCH block may be bypassed

          【讨论】:

            猜你喜欢
            • 2013-01-05
            • 1970-01-01
            • 2013-09-09
            • 1970-01-01
            • 2011-03-15
            • 2019-01-07
            • 2010-09-06
            • 2014-11-13
            相关资源
            最近更新 更多