【问题标题】:Setting query timeout on a stored procedure in SQL Server 2005在 SQL Server 2005 中对存储过程设置查询超时
【发布时间】:2009-09-01 00:18:55
【问题描述】:
有谁知道如何设置存储过程的超时时间?在 NET 上找到了一些示例,例如 sp_configure 'remote Query Timeout', 5,但这不起作用。还发现了一些命令“DBPROP_COMMANDTIMEOUT”和“DBPROP_GENERALTIMEOUT”,但我不知道它们是否适合使用,如果适合,如何在我的事务 SQL 代码中使用它们。
【问题讨论】:
标签:
sql
sql-server
stored-procedures
【解决方案1】:
正如 Chris Tybur 所说,您不能在存储过程中或在 SQL Server 上对存储过程进行查询超时。
CommandTimeout 是一个客户端概念:客户端将在一定时间后中止查询。存储过程没有死人的计时器或机制来中止自身/或任何查询)。 SQL Server 将允许查询永远运行。
“Remote Query Timeout”就是:当 SQL Server 进行远程调用时超时,当 SQL Server 本身是另一个服务器的客户端时。它在描述中说:
此值适用于传出
由数据库发起的连接
引擎作为远程查询。这个值
对收到的查询没有影响
数据库引擎。
最近有一个很好的问题:timeout setting for SQL Server
【解决方案2】:
我从未听说过为在服务器端执行存储过程设置超时。通常您会为在您使用的数据提供者(例如 ADO.NET)中运行该过程的命令指定超时时间。
【解决方案3】:
等等 - 真正的问题是,“你想阻止什么正在发生?”每个人都专注于服务器端、客户端,但实际上我们不知道您为什么要问这个问题(这很重要)。
还有另一个“为什么”:为什么要在“存储过程”上设置超时?为什么不是视图、函数或查询?您是否出于特定原因使用术语“存储过程”,或者您只是对学习如何在 T-SQL 中设置超时感兴趣?
我问是因为我想知道您是否有锁定问题,也许 SET LOCK_TIMEOUT 1000 或 WITH(NOLOCK) 可能是您真正需要的。没有更多信息,虽然我不能说。如果您可以就您询问的原因、正在发生的事情以及在达到“超时”时您最终希望发生的事情向我们提供更多反馈,也许我们可以提供更多帮助。
底线:是的,您可以在 T-SQL 中设置超时,是的,您可以使用 T-SQL 停止执行存储过程。但我不太了解您想就去哪里寻找建议或为您提供更多信息。我有点害怕我已经说太多了:)
【解决方案4】:
article 很好地解释了查询超时以及它们如何仅是客户端概念。您可以在 SQL Server 管理工作室中的工具|选项菜单中设置查询超时。
【解决方案5】:
您必须在客户端执行存储过程时设置超时。就 SQL Server 而言,它将让存储过程永远运行,除非被告知取消它。