db ファイル内の他のテーブルの結合を使用して生成されたいくつかのテーブルを含む ms-access ファイルがあります。テーブルの 1 つ ("Pin_Codes" と呼ばれる) は、スクリプトでアクセス "IIf" 条件を取得して、列に入力します。同じための SQL スクリプトは次のとおりです。
SELECT TableA.POSTCODE AS PINCODE,
IIf([tableC_column] IS NOT NULL, [tableC_column], Iif([tableB_column] IS NOT NULL, [tableB_column], "NA")) AS DISTRICT
FROM (TableA
LEFT JOIN [tableB]
ON TableA.POSTCODE = [tableB].Postcode)
LEFT JOIN [tableC]
ON TableA.POSTCODE = [tableC].Postcode_Final;
そのため、表 Pin_Codes には PINCODE (文字列型) と DISTRICT (文字列型) という名前の 2 つの列があります。
このアクセス ファイルをアプリケーションにインポートすると、最初に accdb ファイル内のすべてのテーブルのスキーマがチェックされます。しかし、Pin_Codes のスキーマを取得すると、DISTRICT 列の max_length は約 577346 になります (文字列型であるため、255 である必要があります)。ただし、PINCODE の max_length は 255 で問題ありません。
ダミーの IIf 条件 (常に真の条件があり、真と偽の部分が同じ) でも、このエラーが発生します。さらに、DISTRICT 列の IIf 条件を削除すると (そして、tableB_column または "NA" と入力すると)、問題が解決し、長さの値は 255 になります。
アプリケーションによって適切に解釈されているソース テーブル TableA、tableB、および tableC のスキーマを確認しました。
この問題の原因は何ですか?これを克服する方法はありますか (「IIf」条件を廃止する以外に)?
NB スキーマは、System.Data.DataTable.GetSchemaTable()、スキーマ テーブルを取得するための OleDB 関数、および JetOLEDB4.0 dll の両方を使用して取得およびテストされました。