如果我select了15个以上的领域,那么我会遇到灾难性的失败

使用SQL Server 2012我连接到一个链接的服务器上的Pervasive SQL。

当我做select *select field1,field2,field3....field15我得到这个错误:

 Msg 7399, Level 16, State 1, Line 1 The OLE DB provider "MSDASQL" for linked server "KSLAP208" reported an error. The provider reported an unexpected catastrophic failure. Msg 7330, Level 16, State 2, Line 1 Cannot fetch a row from OLE DB provider "MSDASQL" for linked server "KSLAP208". 

我觉得有什么样的记忆问题? 它不会允许我select超过一定数量的数据?

而如果我selectless量的数据select field1,field2它没有问题。

我究竟做错了什么?

微软网站上的一篇文章build议您通过禁用链接服务器的查询预取来解决此问题 。

在服务器的“ODBC数据源pipe理员”面板上,从系统DSNconfiguration您的链接服务器。 在“性能”选项卡下,取消选中“为查询启用预取数据”框。 好的好的。 在SQL Management Studio中删除并重新创build链接的服务器。

您可以在创buildDSN时清除“性能”选项卡中的“为查询启用数据预取”checkbox,或者在创build无DSN连接时将“PREFETCH = 0”添加到连接string中,以禁用预取。

由于我无法访问Pervasive的下载区域(和SQL Server的ODBC连接在我的Server 2012安装上看起来完全不同),所以我无法对此进行testing。 无论如何,它仍然可以帮助你…

这是否工作:selectTOP 1 field1,field2,field3 …. field15。
如果是的话,怎么样SELECT TOP 10 field1,field2,field3 …. field15。
如果是的话,怎么样SELECT TOP 100 field1,field2,field3 …. field15。
重复等等

假设它在某个时候中断了,为唯一的一列(或一组列)添加一个ORDER BY子句。 重复并调整行数,直到找出罪魁祸首。 比如说,SELECT TOP 12345可以工作,但是SELECT TOP 12346不会。 (一个好的ORDER BY在这里是很重要的,以确保它每次都返回相同的数据集合。)现在使用WHERE子句范围来抓取出现在“好”数据底部的less量数据,然后增加WHERE范围有点包括坏行。 如果它现在可以工作,那么这指的是数据量,它至lesscertificate了你的原始猜测,如果它仍然出错,去查看那个查询中的12346行,看看是否有什么奇怪的。

我可以详细说明,这是否让你在某个地方。

我知道这个问题很久以前就被问过了,但是对于Google的人来说,碰到这个post…

我假设你在链接到的服务器上运行它时查询是黄金的?

你确切的查询是什么?

你在做什么:

 Select * from "the linked server" 

-要么-

 Select * from openquery("the linked server",'Select * from "the table"') 

它们是有区别的:

  1. 第一个从远程服务器中提取所有logging,然后在本地服务器上执行查询。
  2. 第二个在远程服务器上首先运行查询。 远程服务器只返回结果集。

有可能会超时,但我不认为这是你的问题。

我碰到一个问题做一个链接服务器到mysql 。 我试过#1,我似乎记得得到相同的无用的错误。 事实certificate,#1只能与其他SQL服务器一起工作(或效果最好)。 链接到非SQL服务器时,您必须使用#2(openquery)。