К сожалению, мы используем Advantage Database Server Torture Edition Версия 8.1.
После того, как я закончил свой проект, я услышал, что база данных настроена с учетом регистра. Поэтому я изменил структуру таблицы, все типы данных Char на CIChar, что является регистром нечувствительного поля char. Но я получаю эту ошибку при выполнении моей программы:
Advantage.Data.Provider.AdsException:
Ошибка 7200: ошибка AQE: состояние =
HY000; NativeError = 2214;
[Расширенные системы] [Преимущество SQL
Двигатель] Недопустимое принуждение: Результат
выражение является неоднозначным
тип.
Я обнаружил, что ISNULL (myciChar, '') вызывает эту проблему, но я не понимаю, ПОЧЕМУ?
Как я мог решить эту проблему? Есть ли другие известные проблемы с типом данных cichar?
Любая помощь будет оценена. Спасибо.
[обновление]
Я нашел причину этой ошибки. Было два момента для уточнения.
- База данных имеет версию 8.1, но у архитектора данных есть версия 7.1, и в локальном режиме она использует версию 7.1 движка архитектора. Это означает, что это проблема v7.1.
- 2-й параметр в функции isnull - это по умолчанию регистр с учетом регистра в версии 7.1, в то время как мой столбец mytext - cichar, и это тип неоднозначных символов. Так что, если у кого-то есть такая же проблема, она будет работать в v7.1 с объявлением сортировки:
работает в v7.1:
select myid, isnull(mytext, '-' COLLATE ads_default_ci) as mytext from mytable
ошибка в версии 7.1:
select myid, isnull(mytext, '-') as mytext from mytable