2015-03-30 3 views
0

Этот запрос работает:Жар имя поля спасаясь

SELECT r.ID FROM SomeTable r 

Но следующий дает мне Token unknown - "ID" ошибку:

SELECT r."ID" FROM SomeTable r 

Почему это, и что это путь правильно бежать имена полей в Firebird?

+0

Что такое диалект базы данных? Диалект 1 не поддерживает цитируемые имена объектов, а двойные кавычки на диалекте 1 - это просто (char) строки. Я предполагаю, что база данных - это диалект 1. –

+0

@MarkRotteveel, да, это был «Dialect1», я обновляю сервер базы данных до 2.5 и теперь это «Dialect3». Есть ли способ перейти на «Dialect3» на firebird1.5? –

+0

Диалект 3 был по умолчанию с начала Firebird (что означает: с Interbase 6). Таким образом, ваша база данных была явно создана как диалект 1 (или она предварительно задает Firebird), это может означать, что она требует/зависит от конкретного поведения на диалекте 1. Примечания по обновлению диалекта 1 до диалекта 3 см. В главе «Начало работы с Interbase 6.0» в главе «Перенос баз данных на диалект 3». Он доступен по адресу http://www.firebirdsql.org/en/reference-manuals/ (в соответствии с инструкциями Interbase 6.0, полный набор) –

ответ

2

Вы используете базу данных диалекта 1 (или вы подключили диалект 1 к диалекту соединения). Dialect 1 не поддерживает цитируемые идентификаторы, он был устаревшим с тех пор, пока не существовал Firebird (когда в 1999/2000 году он оставался Interbase 6 beta).

В диалекте 1, двойные кавычки используются для строк (символ/VARCHAR), так что синтаксический анализатор не видит "ID" как имя объекта, но в виде строки, поэтому он бросает Токена неизвестной ошибки, как это ожидая имени объекта.

Если это новая база данных, перезапустите ее с помощью базы данных диалекта 3. Если это существующая база данных, вам действительно стоит подумать о ее миграции на диалект 3. См. «Перенос баз данных на диалект 3» в руководстве «Начало работы с Interbase 6» (доступно от http://www.firebirdsql.org/en/reference-manuals/, оно находится в полном наборе, указанном в конце страницы).

0

Я проверяю этот вопрос на firebird2.5, и он не повторяется на нем.
Обнаружен только на старом сервере Firebird1.5.
Итак, правильное решение - обновление сервера до 2,5 с меньшим количеством ошибок :)

Смежные вопросы