SQL0666 – SQL查询超出指定的时间限制或存储限制

我在使用Odbc连接字符串调用DB2数据库时会定期收到此错误消息。 我已经尝试将DbCommand对象的CommandTimeout设置为多个值,但我仍然收到以下错误。

SQL0666 – SQL查询超出指定的时间限制或存储限制。

是否有一个技巧来阻止错误输出。 这很奇怪,因为相同的查询有时会起作用,有时会超时。 任何帮助,将不胜感激。 谢谢!

我已经尝试将DbCommand对象的CommandTimeout设置为多个值

我设置DbCommand.CommandTimeout = 0,这修复了超时错误

风筝的答案是正确的,但是,我想在SQL Server集成服务(SSIS)项目中搜索相同的错误消息时找到此问题和答案后,分享我的观察/经验。

今天早些时候,我的一个SSIS软件包开始在其中一个步骤上收到此错误。 经过一些研究后,我发现我的软件包在通过ODBC连接到iSeries数据库的DataReader Source对象上失败了。 我不确定这是ODBC错误,还是iSeries / ODBC数据库驱动程序中的错误,但错误消息完全相同。

对我来说,真正奇怪的是我可以从MS Access中的链接表中浏览数据,该链接通过相同的ODBC连接,我也可以在Access中的同一数据集中运行MAKE TABLE操作而不会有任何问题。 在搜索错误消息后,我发现了这个Q&A。这个提示也适用于SSIS包。

要在SSIS中修复此问题,您需要在Microsoft BIDS设计器中打开您的包。 接下来,打开关联的Data Flow Task ,然后选择遇到超时的DataReader Source对象。

DataReader Source对象具有一个也称为CommandTimeout的属性。 将其设置为0 (而不是默认值30 )应该可以解决问题。 在validation超时是问题之后,我将超时设置为60并重新执行该步骤。 一分钟超时解决了问题。

值得注意的是,将所有DataReader Source对象上的CommandTimeout值更新为0可能很诱人。 不建议这样做。 相反,保持超时并将限制增加到相当慷慨的价值。 像我一样将它们加倍,或者给出一个更加慷慨的5-10分钟超时值。

超时属性存在是有原因的。 您可以为应用程序提供超时超时,但如果应用程序根本没有超时,那么您的应用程序可能会在数据库引擎中出现问题导致该步骤永远不会执行的可能性! 这可能不太可能,但并非不可能。

保持安全并适当调整您的超时。