Инструкции SQL, сформированные во время выполнения
Приложения, выполняющие нерегламентированный анализ, обычно создают инструкции SQL во время выполнения. Например, электронная таблица может позволить пользователю выбирать столбцы, из которых будут извлекаться данные:
// 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);
}
Другой класс приложений, которые обычно создают инструкции SQL во время выполнения, являются средами разработки приложений. Однако инструкции, которые они создают, жестко закодированы в приложении, где они обычно могут быть оптимизированы и протестированы.
Приложения, которые создают инструкции SQL во время выполнения, могут обеспечить огромную гибкость для пользователя. Как видно из предыдущего примера, который даже не поддерживал такие распространенные операции, как предложения WHERE , предложения ORDER BY или соединения, создание инструкций SQL во время выполнения значительно сложнее, чем операторы жесткого написания кода. Кроме того, тестирование таких приложений проблематично, так как они могут создавать произвольное количество инструкций SQL.
Потенциальный недостаток создания инструкций SQL во время выполнения заключается в том, что требуется гораздо больше времени для создания инструкции, чем использование жестко закодированного оператора. К счастью, это редко беспокоит. Такие приложения, как правило, являются интенсивными в пользовательском интерфейсе, и время, когда приложение тратит создание инструкций SQL, как правило, меньше по сравнению с временем, когда пользователь тратит ввод условий.