런타임 시 생성된 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 문을 생성하는 데 소요되는 시간은 일반적으로 사용자가 조건을 입력하는 데 소요되는 시간에 비해 작습니다.