[转]SQL Server 「逾时过期」的处理方式

基本上 SQL Server 只要在处理大量数据的指令,如 INSERT INTO A SELECT * FROM B 在数据量很大的时候,很容易发生 Timeout ,也就是常见的「逾期过时」错误。


SQL Server 本机用 Enterprise Manager 执行的话还好处理,只要更改设定值就好了。(工具->选项->进阶,加大逾时秒数)。

但是绝大部份都是在 Remote 下 SQL Command ,只要量稍大,这种「逾期过时」出现的机率也随之增加。

解决的方式最好是加大 SQL Server Remote Command 的 Timeout 时间,只要在 SQL Queryer 里面下:

USE master
GO
EXEC sp_configure 'remote query timeout', 6000
GO
RECONFIGURE
GO

6000 代表的是秒数,也就是 6000 秒(SQL Server预设是 600 秒,)。

另一种就是用外部程序来处理,但是可能还是会受限于 SQL Server 的限制,尤其 ADODB 在这部份还有严重的Bug,详见:

PRB: CommandTimeout Does Not Inherit From Connection Timeout
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q195489

程序设定 CommandTimeout 处理的范例:

Dim conn As New ADODB.Connection
conn.Open(ConnStr)
conn.CommandTimeout = 600  '秒
conn.Execute("INSERT INTO A SELECT * FROM  B")
conn.Close()
conn = Nothing

需注意的是在 ADODB 2.6 以前,CommandTimeout 不可以设为 0 (无限制时间),非不得以要使用的话,必须使用 ADODB.Command,详见:

FIX:使用 Connection 对象时的 CommandTimout 属性问题
http://support.microsoft.com/default.aspx?scid=kb;zh-tw;175264

 

转载于:https://www.cnblogs.com/frankychan/p/3210588.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值