Interbase SQL SELECT запрос с использованием CASE - PullRequest
0 голосов
/ 16 ноября 2009

Я выполняю следующий запрос к .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. .gdb-файл работает на диалекте 1. Имеет ли это значение? В чем разница между .ib-файлом и .gdb-файлом?

1 Ответ

0 голосов
/ 16 ноября 2009

.gdb и .ib являются расширениями файлов juast. Они ни на что не влияют.

Я предполагаю, что проблема здесь в чувствительности к регистру. В соответствии с функцией «Идентификатор с разделителями» в стандарте SQL, если при создании таблицы используются двойные кавычки, т.е.

CREATE TABLE "Users" (
    "UserId" INTEGER NOT NULL PRIMARY KEY, 
    /* ... */

... тогда идентификатор чувствителен к регистру. Сделав это, вы должны всегда использовать (1) разделители (двойные кавычки) и (2) правильный регистр всякий раз, когда вы делаете что-нибудь с таблицей.

Раздражает, да, но стандарт SQL требует этого. В SQL Dialect 3 более строго соблюдаются стандарты SQL, включая идентификаторы с разделителями.

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

...