複数のSQLレポートを作成する必要があります。各レポートは、前のレポートの結果に依存します。すべてのクエリの形式は次のとおりです。Select1、Report 1、Select 2 from Select 1、Report 2、Select 3 from Select 2、Report 3、...などから...ReportN。
現在、「N」個の個別のSQLクエリを使用して、レポートの完全なセットを生成しています。すべてのクエリには、以前のすべてのクエリのSQLコードが含まれています。その結果、レポート1は「N」回実行され、レポート2は「N-1」回実行されます。複数のレポートで同じselectステートメントが無意識に繰り返されると、パフォーマンスの問題。
レポート「N」によって生成される中間レポート(理想的には.csvファイル)をエクスポートして、他のすべてのレポートが不要になるようにするにはどうすればよいですか。
私たちのケースに固有のいくつかの複雑な要因:
- ターンキーアプローチを使用する必要があり、手動による介入を使用するアプローチは受け入れられません。プレーンテキスト出力が必要です。
- OBDC(具体的にはPythonのpyobdcパッケージ)は、SQLクエリをSQL Serverに(カーソルとして)渡すために使用されます。Pythonは結果を使用して、レポートを.csvファイルとして作成します。
- ストアドSQLプロシージャは禁止されていますが、既存のSQLコードは一時テーブルを使用します。
- 結果は私の(クライアント)マシンに書き込む必要があります。IM部門では、サーバー上の一時フォルダーの使用を許可している場合があります。
- pyobdcは1つの結果セットしか受け入れられないようです(したがって、「N」クエリが必要です)。適切な結果セットが返されるようにするには、SQLクエリが「SETNOCOUNTON」で始まる必要があります(pyobdcメーリングリストのアドバイスに従います)。SQLによって返される複数の結果セットから正しい結果セットを返す/選択する他の方法を私は知りません。結果セットをスキップするためにpyobdcメソッド(cursor.nextset)を試しましたが、何も返されませんでした。
- レポート「n-1」の結果をレポート「N」に渡すことを検討しましたが、関連するデータの量が多分これを非現実的にしています。
- Python(3.2.2)とSQLコードは、十分に証明された製品コードです。言語を変更することは実際的な選択肢ではありません。OBDCパッケージの変更は可能ですが、可能性は低いです(非常に強力なケースを作成する必要があり、他のOBDCパッケージはプラットフォーム間で簡単に移植でき、Microsoft SQL Server 2008 Management Studioに接続できる必要があります)。
- pydevプラグインを備えたEclipse(Helios)を使用して、SQLクエリを起動するPythonアプリケーションを起動しています。
- クライアントのO/SはXPProSp 3であり、サーバーは同じであると考えられています。同社は、マシンを「近いうちに」Windows 7/8に移行することを計画しているため、そのO/Sへの移植性が要因になります。