2

進行状況データベースからデータをインポートしています。

次のエラーが表示されます。

テーブル内の進行中の Openge Wire Protocol 列に、最大長または精度を超える値があります

選択ステートメントで選択列のデータの特定の長さを指定する方法はありますか?

例えば: SELECT SUBSTRING(EMAIL,15) FROM SQL92.PROGRESSTABLE

SUBSTRING は有効なフィールド値の部分文字列を提供しますが、データセットが「ダーティ」行にヒットすると、上記のエラーで失敗します。

Progress データベースにアクセスできないため、progress DBTool を実行してデータを修正できません。

同じ種類の質問がここで尋ねられましたが、解決策は投稿されませんでした. IDataReader に列の長さの定義を無視させることはできますか?

4

2 に答える 2

0

ODBC 接続から取得した SQL データのデータ長は、Progress データベース フィールドの「Width」プロパティによって決まります。これには、必要なテーブルを選択し、メニュー バーの [オプション]、[フィールド幅の調整] を選択して、[進行状況データ ディクショナリ] からアクセスできます。CHAR フィールドでは、通常、「幅」プロパティは「フォーマット」幅の 2 倍に相当する値で定義されます。

例: フィールド FOO、タイプ CHAR、フォーマット "x(20)" のデフォルトの SQL 幅の値は 40 で、元のフォーマット サイズの 2 倍です。

ただし、プログレスがフィールドに格納されているデータの量を気にせず、「フォーマット」句が表示目的のみである限り、「x(20)」としてフォーマットされたCHARフィールドに20文字を超える長さのデータを書き込むことができます(もちろん、彼のデータ型サイズの制限内で)、Oracle のように、SQL 接続のデータ長をハード リミットで制限します。つまり、たとえば、N 長として定義された Oracle データベース フィールドに N + n 文字を書き込むことができない限り、フィールドがフォーマット " x(N)" であり、そこに保存されているデータは通常 2N を超えます。

Progress データベースにアクセスできない場合は、Progress データベースに保存されているデータの責任者に連絡し、データベース スキーマのフィールドのサイズを変更して、保存されているデータの全量に一致するように依頼してください。データベースにデータを保存しているプログラムは、データベースのフィールド サイズと一致しない可能性があります。そうしないと、「Width」文字を超えるフィールドを持つテーブルからデータを取得できなくなります。

于 2014-09-23T12:27:40.203 に答える