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.