次の方法で共有


実行時に構築された 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 ステートメントの構築に費やす時間は、通常、ユーザーが条件の入力に費やす時間に比べればわずかです。