执行查询时超时错误

时间:2012-01-31 08:01:02

标签: sql sql-server vb6 sql-server-2000

我在存储过程中执行以下查询,将一年的事务从一个表转移到另一个表:

insert into 
    table2 
select
    * 
from 
    table1 
where 
    dates between '20110101' and 20111231'

当我使用VB6调用存储过程时,它会超时。

我尝试将RDO连接上的QueryTimeout属性设置为五秒,如下所示:

RdoConn.QueryTimeout = 5000

但它仍然超时。

如何防止执行查询超时?

2 个答案:

答案 0 :(得分:1)

如果您使用Ado连接,则可以使用以下代码

dim myConn 
Set myConn = CreateObject("ADODB.Connection") 
myConn.CommandTimeout = 3600
myConn.ConnectionTimeout = 3600

然后使用此连接执行查询。

您的查询在没有问题的情况下运行多长时间?

更新:
使用RdoConnection,您可以尝试将事件设置为LoginTimeout

RdoConn.QueryTimeout = 5000
RdoConn.LoginTimeout = 5000

Oleg Dok指出

RdoConn.QueryTimeout = 0 'disable timeout
RdoConn.LoginTimeout = 0 'disable timeout

答案 1 :(得分:1)

您的两个选项(不更改数据库架构)是:

1)增加你的超时时间,例如:

RdoConn.QueryTimeout = 30000

2)如果您的查询执行时间超过30秒,那么您应该尝试将select语句分解为更小的部分:

Insert into table2 select * from table1 where dates between '20110101' and 20110131'
Insert into table2 select * from table1 where dates between '20110201' and 20110228'

如前所述,您还应该查看数据库中的索引和数据类型以提高性能