在SQL Server 2005中设置存储过程的查询超时时间

8

有没有人知道如何设置存储过程的超时时间?在网上找到了一些示例,例如sp_configure 'remote Query Timeout',5,但这并没有起作用。还发现了一些命令“DBPROP_COMMANDTIMEOUT”和“DBPROP_GENERALTIMEOUT”,但我不知道是否应该使用它们,如果是,如何在我的Transact-SQL代码中使用它们。

5个回答

5
如Chris Tybur所说,在存储过程内部或SQL Server上不能设置查询超时时间。
CommandTimeout是客户端的概念:客户端将在一定时间后中止查询。没有死亡计时器或机制来使存储过程自我中止/或任何查询。 SQL服务器将允许查询永远运行。
Remote Query Timeout”正是这样:当SQL Server作为另一个服务器的客户端时,SQL Server进行远程调用时的超时时间。它在说明中说:

此值适用于由数据库引擎作为远程查询启动的传出连接。此值对由数据库引擎接收的查询没有影响。

最近有一个带有很好信息的问题:timeout setting for SQL Server

3

我从未听说过在服务器端设置执行存储过程的超时时间。通常,您会在使用的数据提供程序(如ADO.NET)中为运行存储过程的命令指定超时时间。


3
等等,真正的问题是,“你想要防止什么事情发生?”大家都关注于服务器端和客户端,但实际上我们不知道你为什么要问这个问题(这很重要)。
还有一个“为什么”:为什么你要在“存储过程”上设置超时?为什么不是视图、函数或查询?你是否出于特定原因使用了“存储过程”这个术语,或者你只是想学习如何在T-SQL中设置超时?
我问这个问题是因为我想知道你是否遇到了锁定问题,也许SET LOCK_TIMEOUT 1000或WITH(NOLOCK)可能是你真正需要的。但如果没有更多信息,我不能确定。如果你能给我们更多反馈,告诉我们你为什么要询问,发生了什么,以及如果达到了你的“超时”目标,最终你希望发生什么,也许我们可以提供更多帮助。
底线是:是的,你可以在T-SQL中设置超时,并且可以使用T-SQL停止执行存储过程。但我不知道你想要什么样的建议来寻找答案或者给你更多信息。我有点害怕已经说得太多了 :)

1

这篇文章非常好地解释了查询超时以及它们只是客户端概念的问题。你可以在SQL Server管理工具中从“工具|选项”菜单中设置查询超时。


0

在客户端执行存储过程时,您必须设置超时时间。就 SQL Server 而言,除非被告知取消,否则它将一直运行存储过程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接