Compartilhar via


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

Os aplicativos que executam análises conforme o necessário geralmente criam instruções SQL em tempo de execução. Por exemplo, uma planilha pode permitir a um usuário selecionar colunas das quais recuperar 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 aplicativos que geralmente constrói instruções SQL em tempo de execução é composta pelos ambientes de desenvolvimento de aplicativos. Porém, as instruções que eles constroem são embutidas em código no aplicativo que estão construindo, no qual costumam poder ser otimizadas e testadas.

Aplicativos que constroem instruções SQL em tempo de execução podem proporcionar uma grande flexibilidade ao usuário. Como mostra o exemplo anterior, que sequer era compatível com operações comuns como cláusulas WHERE, cláusulas ORDER BY ou junções, a construção de instruções SQL em tempo de execução é muito mais complexa do que instruções embutidas em código. Ainda, testar esses aplicativos é problemático porque eles 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 leva muito mais tempo para construir uma instrução do que usar uma instrução embutida em código. Felizmente, isso não costuma ser uma preocupação. Esses aplicativos tendem a usar muito a interface do usuário, e o tempo que o aplicativo gasta para construir instruções SQL geralmente é pequeno em comparação ao tempo que o usuário gasta inserindo critérios.