Я пытаюсь создать систему, в которой параметры SQL автоматически привязываются к новым запросам. Согласно этой теме:
SQL Server - недопустимые символы в именах параметров
Внутри идентификаторов должны быть разрешены символы @, _ и #. Итак, я попытался построить параметры как:
: tablename # fieldname
Но при этом я получаю ошибку:
PBdatabase.select_query: [1] DB [2] prepare () SELECT * FROM creature WHERE pk =: creature # pk [рядом с "#pk": синтаксическая ошибка]
Кажется, ему не нравится символ #, я пробовал использовать подчеркивание, похоже, он работает, но я уже использую подчеркивание в именах полей. Вот почему я хотел использовать другого персонажа.
Поскольку в приведенном выше потоке говорилось о SQL-сервере, ограниченные символы в SQLITE могут быть другими. Я нашел список ограниченных ключевых слов SQLITE, но не символов.
Кто-нибудь знает, какой еще специальный символ я мог бы использовать?
Обновлять
Кто-нибудь хочет знать, какая у меня от этого польза. Вот пример, допустим, у вас есть 2 таблицы с отношением 1 к N: Флот содержит корабли.
Вы хотите отобразить форму, состоящую из 2 блоков, где в верхней части отображается 1 выбранный флот в данный момент. Где в нижнем блоке перечислены все корабли во флоте.
Первый запрос блока будет примерно таким:
SELECT pk, number, location FROM fleet;
Затем поля выбранной записи будут помещены в реестр полей со следующими именами (при условии, что символ # будет действительным):
:fleet#pk
:fleet#number
:fleet#location
Затем будет запущен второй запрос для второго блока, включая зарегистрированные поля выше. Таким образом, запрос будет выглядеть так:
SELECT pk, fk_fleet, name FROM ship WHERE fk_fleet = :fleet#pk
В этом запросе используется параметр из запроса выше. Идентификатор будет заменен значением из предыдущего запроса. Это позволяет отображать только корабли, связанные с выбранным выше флотом, вместо всех доступных кораблей.
Некоторые из вас могут сказать, что я могу просто сохранить нужные мне переменные и передать их в качестве параметра следующему запросу. Проблема в том, что все запросы загружаются из базы данных. На самом деле я не знаю, какой запрос я собираюсь запустить и какое значение мне нужно будет сохранить для другого запроса. Вместо этого я сохраняю их все в реестре, и если другой оператор SQL запросит параметр, значение будет доступно.