1

SQL Server 2008 R2 で openquery を使用して Progress Database からデータを選択しようとしていますが、このエラー メッセージが表示されます。

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".

いくつかのテストを行ったところ、varchar 列である特定の列に問題があることがわかりました。列には約 30 の列があり、選択は正常に機能します。これは私のクエリです:

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')

何をすべきかについて何か考えはありますか?

4

2 に答える 2

2

進捗データはすべて可変長です。アプリケーションを定期的に「オーバースタッフ」フィールドに進めます。多くの場合、SQL ツールはこれに反対します。Progress db は、Progress が提供する「dbtool」ユーティリティを使用して更新できる SQL-WIDTH 属性を維持します。Progress データベースからデータを取得する場合は、このツールを定期的に使用する必要があります。

http://knowledgebase.progress.com/articles/Article/P24496?q=how+to+use+dbtool+to+modify+sql-width&l=en_US&c=Product_Group%3AOpenEdge&fs=検索&pn=1

簡単な方法は、PROENV (OpenEdge プログラム グループにあります) を起動し、「dbtool dbname」を実行してオプション 2 を選択することです。

または、次の SQL を使用できます。

ALTER TABLE ALTER COLUMN SET PRO_SQL_WIDTH ;

問題の原因となっているテーブルと列がわかっている場合は、すべてをスキャンする必要はありません。

于 2013-11-11T16:31:37.777 に答える