Condividi tramite


Istruzioni SQL costruite in fase di esecuzione

Le applicazioni che eseguono l'analisi ad hoc creano in genere istruzioni SQL in fase di esecuzione. Ad esempio, un foglio di calcolo potrebbe consentire a un utente di selezionare le colonne da cui recuperare i dati:

// 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);  
}  

Un'altra classe di applicazioni che in genere costruisce istruzioni SQL in fase di esecuzione sono gli ambienti di sviluppo di applicazioni. Tuttavia, le istruzioni che costruiscono sono hardcoded nell'applicazione che stanno creando, dove in genere possono essere ottimizzate e testate.

Le applicazioni che creano istruzioni SQL in fase di esecuzione possono offrire un'enorme flessibilità all'utente. Come si può notare nell'esempio precedente, che non supportava nemmeno operazioni comuni come clausole WHERE, clausole ORDER BY o join, la creazione di istruzioni SQL in fase di esecuzione è molto più complessa rispetto alle istruzioni hardcoded. Inoltre, il test di tali applicazioni è problematico perché può costruire un numero arbitrario di istruzioni SQL.

Un potenziale svantaggio della creazione di istruzioni SQL in fase di esecuzione consiste nel fatto che la costruzione di un'istruzione richiede molto più tempo rispetto all'uso di un'istruzione hardcoded. Fortunatamente, ciò raramente rappresenta un problema. Tali applicazioni tendono a un utilizzo intensivo dell'interfaccia utente e il tempo che l'applicazione impiega nella costruzione di istruzioni SQL è in genere ridotto rispetto al tempo trascorso dall'utente nell'immissione dei criteri.