Я использую IBPP для использования базы данных firebird на C++. Я хотел бы динамически установить имя таблицы в операторе обновления sql. Поэтому я сделал имя таблицы знаком вопроса в Prepare("UPDATE ? ...")
. К сожалению, это вызывает ошибку:
* IBPP::SQLException * Контекст: Statement::Prepare( UPDATE ? SET name = ? WHERE stage_system_id = ? ) Сообщение: isc_dsql_prepare failed
Сообщение SQL: -104 Недопустимый токен
Код двигателя: 335544569 Сообщение двигателя: Ошибка динамического SQL Код ошибки SQL = -104 Неизвестный токен - строка 1, столбец 8?
Можно ли сделать имя таблицы параметром? Можно создать строку вручную, но это довольно громоздко. Или делать имя таблицы параметром вообще не очень хорошая идея? Ниже приведен полный фрагмент кода:
try
{
m_DbStatement->Prepare (
"UPDATE ? SET name = ? WHERE stage_system_id = ?" /*Works not - throws exception*/
/*"UPDATE stage_systems SET name = 'qqq' WHERE stage_system_id = 3"*/ /*Works*/
);
}
catch (std::exception& e)
{
std::string error = e.what();
throw;
}
m_DbStatement->Set(1, rowElementToUpdate.tableName.c_str ());
m_DbStatement->Set(2, rowElementToUpdate.value.c_str ());
m_DbStatement->Set(3, rowElementToUpdate.primaryKey);
m_DbStatement->Execute ();
m_DbTransaction->CommitRetain ();
}