実行時に構築された SQL ステートメント
アドホック分析を実行するアプリケーションは、通常、実行時に SQL ステートメントを構築します。 たとえば、スプレッドシートを使用すると、ユーザーは以下のようなデータを取得する列を選択できます。
// SQL_Statements_Constructed_at_Run_Time.cpp
#include <windows.h>
#include <stdio.h>
#include <sqltypes.h>
int main() {
SQLCHAR *Statement = 0, *TableName = 0;
SQLCHAR **TableNamesArray, **ColumnNamesArray = 0;
BOOL *ColumnSelectedArray = 0;
BOOL CommaNeeded;
SQLSMALLINT i = 0, NumColumns = 0;
// Use SQLTables to build a list of tables (TableNamesArray[]). Let the
// user select a table and store the selected table in TableName.
// Use SQLColumns to build a list of the columns in the selected table
// (ColumnNamesArray). Set NumColumns to the number of columns in the
// table. Let the user select one or more columns and flag these columns
// in ColumnSelectedArray[].
// Build a SELECT statement from the selected columns.
CommaNeeded = FALSE;
Statement = (SQLCHAR*)malloc(8);
strcpy_s((char*)Statement, 8, "SELECT ");
for (i = 0 ; i = NumColumns ; i++) {
if (ColumnSelectedArray[i]) {
if (CommaNeeded)
strcat_s((char*)Statement, sizeof(Statement), ",");
else
CommaNeeded = TRUE;
strcat_s((char*)Statement, sizeof(Statement), (char*)ColumnNamesArray[i]);
}
}
strcat_s((char*)Statement, 15, " FROM ");
// strcat_s((char*)Statement, 100, (char*)TableName);
// Execute the statement . It will be executed once, do not prepare it.
// SQLExecDirect(hstmt, Statement, SQL_NTS);
}
一般的に、実行時に SQL ステートメントを構築するアプリケーションのもう 1 つのクラスは、アプリケーション開発環境です。 ただし、構築するステートメントは、ビルドするアプリケーションでハードコーディングされており、通常は最適化とテストが行えます。
実行時に SQL ステートメントを構築するアプリケーションは、ユーザーに非常に大きな柔軟性をもたらします。 WHERE 句、ORDER BY 句、結合などの一般的な操作さえサポートしていない前述の例からわかるように、実行時に SQL ステートメントを構築する方が、ハードコーディングステートメントよりも非常に複雑です。 さらに、このようなアプリケーションのテストは、任意の数の SQL ステートメントを構築できるため、問題になります。
実行時に SQL ステートメントを構築する場合の潜在的な欠点は、ハードコーディングされたステートメントを使用するよりも、ステートメントの構築にはるかに時間がかかるということです。 幸いなことに、このような懸念事項はめったにありません。 このようなアプリケーションはユーザー インターフェイスを集中的に使用する傾向があり、アプリケーションが SQL ステートメントの構築に費やす時間は、通常、ユーザーが条件の入力に費やす時間に比べればわずかです。