Compartilhar via


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

Os aplicativos que executam a análise ad hoc geralmente criam instruções SQL em tempo de execução. Por exemplo, uma planilha pode permitir que um usuário selecione 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 normalmente constrói instruções SQL em tempo de execução são ambientes de desenvolvimento de aplicativos. No entanto, as instruções que eles constrói são codificadas no aplicativo que estão criando, onde geralmente podem ser otimizadas e testadas.

Os aplicativos que constróim instruções SQL em tempo de execução podem fornecer uma flexibilidade tremenda para o usuário. Como pode ser visto no exemplo anterior, que nem sequer dá suporte a operações comuns como cláusulas WHERE , cláusulas ORDER BY ou junções, construir instruções SQL em tempo de execução é muito mais complexo do que instruções de codificação rígida. Além disso, testar esses aplicativos é problemático porque eles podem construir um número arbitrário de instruções SQL.

Uma desvantagem potencial da construção de instruções SQL em tempo de execução é que leva muito mais tempo para construir uma instrução do que usar uma instrução codificada em código. Felizmente, isso raramente é uma preocupação. Esses aplicativos tendem a ser intensivos de interface do usuário e o tempo gasto pelo aplicativo na construção de instruções SQL geralmente é pequeno em comparação com o tempo que o usuário passa inserindo critérios.