Advantage Database Server (ADS) CIChar тип данных ISNULL - PullRequest
2 голосов
/ 13 мая 2011

К сожалению, мы используем Advantage Database Server Torture Edition Версия 8.1. После того, как я закончил свой проект, я услышал, что база данных настроена с учетом регистра. Поэтому я изменил структуру таблицы, все типы данных Char на CIChar, что является регистром нечувствительного поля char. Но я получаю эту ошибку при выполнении моей программы:

Advantage.Data.Provider.AdsException:

Ошибка 7200: ошибка AQE: состояние = HY000; NativeError = 2214; [Расширенные системы] [Преимущество SQL Двигатель] Недопустимое принуждение: Результат выражение является неоднозначным тип.

Я обнаружил, что ISNULL (myciChar, '') вызывает эту проблему, но я не понимаю, ПОЧЕМУ? Как я мог решить эту проблему? Есть ли другие известные проблемы с типом данных cichar?

Любая помощь будет оценена. Спасибо.

[обновление]

Я нашел причину этой ошибки. Было два момента для уточнения.

  1. База данных имеет версию 8.1, но у архитектора данных есть версия 7.1, и в локальном режиме она использует версию 7.1 движка архитектора. Это означает, что это проблема v7.1.
  2. 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

Ответы [ 2 ]

1 голос
/ 14 мая 2011

Вероятно, вам нужно увидеть больше выражения вашего лица, чтобы рассказать вам, почему вы получаете эту ошибку.Он не столько связан с ISNULL, сколько с выражением, в котором используется ISNULL. Движок, вероятно, обнаружил сравнение и не может автоматически определить, хотите ли вы, чтобы сравнение было чувствительным к регистру или нет.См. документацию , в которой описаны регистронезависимый приоритет и принуждение.

Если не используется в выражении, это может быть просто ошибка (я только что попробовал с 10.1, и она сработала), убедитесь, что выиспользуя последнюю версию 8.1, которая является 8.10.0.38

0 голосов
/ 09 апреля 2014

Я не думаю, что версия 7 поддерживает тип данных cichar, версия 6, конечно, нет. Я использовал версию 6 и сразу перешел к 8 и обнаружил, что все работало с драйвером клиента версии 6, пока я не использовал тип данных cichar, а затем он не закончился для Advantage. Затем мне пришлось обновить всех клиентов до той же версии, что и сервер. Лучше сохранить все версии одинаковыми.

...