Partilhar via


Instruções SQL construídas em tempo de execução

Aplicações que realizam análises ad hoc normalmente constroem instruções SQL em tempo de execução. Por exemplo, uma folha de cálculo pode permitir a um utilizador selecionar colunas das quais recolher dados:

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

Outra classe de aplicações que normalmente constrói instruções SQL em tempo de execução são os ambientes de desenvolvimento de aplicações. No entanto, as instruções que constroem estão codificadas diretamente na aplicação que estão a construir, onde normalmente podem ser otimizadas e testadas.

Aplicações que constroem instruções SQL em tempo de execução podem proporcionar uma flexibilidade tremenda ao utilizador. Como se pode ver no exemplo anterior, que nem sequer suportava operações comuns como cláusulas WHERE , cláusulas ORDER BY ou joins, construir instruções SQL em tempo de execução é muito mais complexo do que codificar instruções fixamente. Além disso, testar tais aplicações é problemático porque podem construir um número arbitrário de instruções SQL.

Uma possível desvantagem de construir instruções SQL em tempo de execução é que demora muito mais tempo a construir uma instrução do que a utilização de uma instrução codificada fixamente. Felizmente, isto raramente é uma preocupação. Estas aplicações tendem a ser intensivas na interface do utilizador, e o tempo que a aplicação passa a construir instruções SQL é geralmente pequeno comparado com o tempo que o utilizador passa a introduzir critérios.