最近、サードパーティ製品が使用するOpenEdgeデータベースを使用して作業を行う必要がありましたが、今日(多くの髪を引っ張った後)、ビューが結果を返さない理由を最終的に特定しました。問題のこのビューは、約100の個別のテーブルを組み合わせてから、クエリされます(このデータベースに対する権限は制限されています)。このビューによって返されるフィールドの1つは、次の行に沿ったハードコードされた文字列リテラルです。
'John Smith' AS TheName
この文字列を含むクエリを実行するのに問題がありました。RTrim(ビューは多くの末尾のスペースを返しました)してから、別のフィールドと連結しようとしました。ただし、このフィールドでRTrimを使用した場合、エラーメッセージやnullなどを返す代わりに、行は返されませんでした。WHERE句やJOINで使用しようとはしていませんでした。これは、単にSELECT ...FROMVIEWNAMEの一部でした。ビューを確認したところ、ビューが文字列の長さを誤って9文字(定義で長さが指定されていない)として検出したようで、RTrimが機能しませんでした。これで、なぜこれがエラーメッセージ、またはSELECTのNULL値につながる可能性があるのか理解できましたが、なぜ行がまったく返されないのでしょうか。?これはSQLの動作としては適切ではないようで、他のRDBMSで発生することはありません。
その他の情報:既存のASP.NETアプリに含まれることを目的として、ODBCおよびWinSQLを介してクエリをテストしています。ビューを作成する権限はありますが、これ以外の方法でバックエンドにアクセスすることはできません。
更新:気紛れなフォローアップとして、WHERE句を指定せずにこのビューをクエリしようとすると、レコードが返されないことがわかりました。これも同じ原因である可能性があります。