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, включая идентификаторы с разделителями.

Чтобы обойти это, не используйте двойные кавычки при создании таблицы, если вы действительно не хотите эту "функцию".

Другие вопросы по тегам