SQL-Anweisungen, die zur Laufzeit erstellt werden
Anwendungen, die ad-hoc-Analysen ausführen, erstellen häufig SQL-Anweisungen zur Laufzeit. Eine Kalkulationstabelle kann es einem Benutzer beispielsweise ermöglichen, Spalten auszuwählen, aus denen Daten abgerufen werden sollen:
// 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);
}
Eine andere Klasse von Anwendungen, die sql-Anweisungen zur Laufzeit erstellen, sind Anwendungsentwicklungsumgebungen. Die anweisungen, die sie erstellen, sind jedoch hartcodiert in der Anwendung, die sie erstellen, wo sie in der Regel optimiert und getestet werden können.
Anwendungen, die SQL-Anweisungen zur Laufzeit erstellen, können dem Benutzer enorme Flexibilität bieten. Wie im vorherigen Beispiel zu sehen ist, das solche allgemeinen Vorgänge wie WHERE-Klauseln , ORDER BY-Klauseln oder Verknüpfungen nicht unterstützt hat, ist das Erstellen von SQL-Anweisungen zur Laufzeit wesentlich komplexer als hartcodierende Anweisungen. Darüber hinaus ist das Testen solcher Anwendungen problematisch, da sie eine beliebige Anzahl von SQL-Anweisungen erstellen können.
Ein potenzieller Nachteil beim Erstellen von SQL-Anweisungen zur Laufzeit besteht darin, dass es viel länger dauert, eine Anweisung zu erstellen, als eine hartcodierte Anweisung zu verwenden. Glücklicherweise ist dies nur selten eine Sorge. Solche Anwendungen sind in der Regel benutzeroberflächenintensiv, und die Zeit, in der die Anwendung das Erstellen von SQL-Anweisungen verbringt, ist im Allgemeinen klein im Vergleich zu der Zeit, die der Benutzer mit der Eingabe von Kriterien verbringt.