【发布时间】:2010-08-25 06:59:43
【问题描述】:
我有一个执行几个查询的存储过程。每个查询都可能因超时而失败。
我还想继续执行其他查询。 这可能吗? try catch 是否适用于超时?
我当然可以为每个查询设置不同的 sps,但这会使应用程序更加复杂。
【问题讨论】:
标签: sql-server sql-server-2008
我有一个执行几个查询的存储过程。每个查询都可能因超时而失败。
我还想继续执行其他查询。 这可能吗? try catch 是否适用于超时?
我当然可以为每个查询设置不同的 sps,但这会使应用程序更加复杂。
【问题讨论】:
标签: sql-server sql-server-2008
你是如何运行 SQL 的?
SQL本身没有超时,所以你描述的问题是不可能的。
超时总是在连接级别/连接应用程序上处理。 SQL Server 很高兴 SQL 调用持续数小时或数天。
因此,除非您做一些“有趣”/不寻常的事情,否则 SP 内的查询不会超时 - 调用该过程的连接将超时并因此回滚事务。
【讨论】:
存储过程中的查询不会超时 - 执行存储过程的 sql 批处理超时 - 所以不,您不能“捕获”然后处理超时。
【讨论】:
如果您经常遇到超时,解决方法是调整查询的性能,不要尝试跳过超时并继续下一个查询。
超时通常是查询设计错误(第 1 原因)、数据库设计错误(第 2 原因)或设备不足的标志。这三个都是可以修复的。所以修复它们。
【讨论】:
简短的回答:不。超时就像您在 SSMS 中取消查询一样:CATCH 不会捕获它。我写了一个罐头答案:Your TRY block may fail, and your CATCH block may be bypassed
【讨论】: