Sql server 2008 无法从OLE DB提供程序中获取行";MSDASQL";“用于链接服务器”;“进展”;
我试图使用SQLServer2008R2上的openquery从进度数据库中选择一些数据,但收到了此错误消息Sql server 2008 无法从OLE DB提供程序中获取行";MSDASQL";“用于链接服务器”;“进展”;,sql-server-2008,linked-server,openedge,progress-db,Sql Server 2008,Linked Server,Openedge,Progress Db,我试图使用SQLServer2008R2上的openquery从进度数据库中选择一些数据,但收到了此错误消息 Msg 7399, Level 16, State 1, Line 1 The OLE DB provider "MSDASQL" for linked server "progress" reported an error. The provider reported an unexpected catastrophic failure. Msg 7330, Level 16, Sta
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "MSDASQL" for linked server "progress" 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 "progress".
我做了一些测试,发现问题出在一个specify列上,它是一个varchar列。该列大约有30列,对于它们,select可以正常工作。
这是我的疑问:
SELECT * from openquery(progress, 'select DescricaoProduto from MP.pub.IMPproduto')
我试着做了一些不同的选择,但没有一个成功。例如:
SELECT * from openquery(progress, 'select Cast(DescricaoProduto as char(100)) as DescricaoProduto from MP.pub.IMPproduto')
你知道怎么做吗?进度数据是所有的可变长度。应用程序的进度通常是“超负荷”字段。SQL工具经常反对这一点。Progress db维护一个SQL-WIDTH属性,该属性可以使用Progress提供的“dbtool”实用程序进行更新。如果要从进度数据库中提取数据,必须定期使用此工具 简单的方法是启动PROENV(在OpenEdge程序组中找到),然后运行“dbtool dbname”并选择选项2 也可以使用以下SQL: ALTER TABLE ALTER COLUMN SET PRO_SQL_WITH
如果您知道是哪个表和列导致了问题,并且不需要扫描所有内容。解决此问题的另一种方法是使用子字符串,如下所示:
SELECT * from openquery(progress, 'select substring(DescricaoProduto,1,100) as DescricaoProduto from MP.pub.IMPproduto')
因此,如果该列定义为30个字符,并且该列包含50个字符,那么子字符串(col,1,50)将实际检索所有50个字符