Страница 1 из 1

Не могу подобрать индекс не усекая по умолчанию ключ. 810

Добавлено: 14 янв 2008, 11:21
san
После перехода на версию 810 сломалась выборка в вип программе.
create view
from synonym oborot oborotBuh
where((
PlansSch.nrec == oborotBuh.cPlansSch
oborot.sodpr == oborotBuh.sodpr
));
Компилятор выдает:Предупреждение: Не могу подобрать индекс не усекая по умолчанию ключ для таблицы OBOROTBUH.

Ключ на Oborot cPlansSch+sodpr такой есть (OBOROT30). Компилятору не нравится поле sodpr.
В 712 это работало без проблем. Структура индекса в версиях 7 и 8 одинаковая.
Кто знает что это за новости?

Добавлено: 14 янв 2008, 11:43
edward_K
видимо в индексе теперь указана длина меньше чем размер поля. В таких случаях нужно писать
'??????' <<=sodpr
and '??????'+chr(251) >>=sodpr
можно (length=??) еще добавить, но сие не на всех субд прокатывает.

Добавлено: 14 янв 2008, 12:07
san
Длина в индексе меньше поля, это так. В 712 длина тоже меньше поля.
Вообщем (length=??) помогло. Платформа ms sql.

Добавлено: 14 янв 2008, 13:45
edward_K
поможет если у вас значение меньше, чем длина индекса во всех записях. А мож на 810 починили. Раньше на mssql и не работало - записи в выборку банально не попадали, если длина ключа=length.

Re: Не могу подобрать индекс не усекая по умолчанию ключ. 81

Добавлено: 11 июн 2010, 10:45
Алексей
наткнулся на такую же ошибку. таблица EXCLASSSEG индекс
CLASSCODE
NAME

мне нельзя писать <<= т.к. мне нужен именно одна конкретная запись, название которой полностью совпадет. в принципе, программа работает верно. просто не обращать внимание на предупреждение?

Re: Не могу подобрать индекс не усекая по умолчанию ключ. 81

Добавлено: 11 июн 2010, 11:25
edward_K
length вам поможет убрать сие предупреждение

Re: Не могу подобрать индекс не усекая по умолчанию ключ. 81

Добавлено: 11 июн 2010, 12:07
KATZ
Здесь еще нюанс появляется. В EXCLASSSEG индексируемая часть поля NAME имеет размер 40 символов. Если у вас несколько записей, у которых они одинаковые, то все записи попадут в выборку. Например, есть наименования

Дополнительный внешний классификатор 0001
Дополнительный внешний классификатор 0002
Дополнительный внешний классификатор 0003


и вы задаете

Код: Выделить всё

...
where
((
  MyCode==EXCLASSSEG.CLASSCODE and
  'Дополнительный внешний классификатор 0001'==EXCLASSSEG.NAME (Length=40)
))
...
Не удивляйтесь, что в выборку попадет не только 0001, но и 0002 c 0003.

Re: Не могу подобрать индекс не усекая по умолчанию ключ. 81

Добавлено: 17 июн 2010, 14:03
Screw
Что же в том удивительного, если, сравниваются только первые 40 символов ключа, т.е., по сути, выбираются все записи, начинающиеся с "Дополнительный внешний классификатор 000"?