Interbase SQL SELECT запрос с использованием CASE
Я запускаю следующий запрос к.gdb-файлу:
SELECT CASE USERS.USERID WHEN 1 THEN 'God' ELSE 'Somebody else' END FROM USERS;
Однако, выполняя по существу тот же запрос к.ib-файлу, я получаю "Ошибка в строке 1 Динамическая ошибка SQL, код ошибки SQL = -104, Токен неизвестен - строка 1, символ 17". Кажется, он не распознает часть CASE USERS.USERID
, В IBConsole.ib-файл работает на диалекте 3 SQL, а.gdb-файл - на диалекте 1. Имеет ли это значение? В чем разница между.ib-файлом и.gdb-файлом?
1 ответ
.gdb
а также .ib
являются расширениями файлов juast. Они ни на что не влияют.
Я предполагаю, что проблема здесь заключается в чувствительности к регистру. В соответствии с функцией "Идентификатор с разделителями" стандарта SQL, если вы используете двойные кавычки при создании таблицы, то есть:
CREATE TABLE "Users" (
"UserId" INTEGER NOT NULL PRIMARY KEY,
/* ... */
... тогда идентификатор чувствителен к регистру. Сделав это, вы должны всегда использовать (1) разделители (двойные кавычки) и (2) правильный регистр всякий раз, когда вы что- либо делаете с таблицей.
Раздражает, да, но стандарт SQL требует этого. SQL Dialect 3 гораздо более строг в применении стандарта SQL, включая идентификаторы с разделителями.
Чтобы обойти это, не используйте двойные кавычки при создании таблицы, если вы действительно не хотите эту "функцию".