четверг, 12 декабря 2013 г.

Ошибка sql server 8618 при выполнения запроса 1С

После перехода на 1С 8.2.19.76 с 8.2.16.368 столкнулись со странной ошибкой. При выполнении запроса типа

ВЫБРАТЬ поле1, ВЫРАЗИТЬ(Поле1.ПолноеНаименование КАК СТРОКА (1000)) , поле3, поле4

ОБЪЕДИНИТЬ ВСЕ 

 ВЫБРАТЬ поле1, ВЫРАЗИТЬ(Поле1.ПолноеНаименование КАК СТРОКА (1000)), поле3, поле4 

ОБЪЕДИНИТЬ ВСЕ

 ВЫБРАТЬ поле1, ВЫРАЗИТЬ(Поле1.ПолноеНаименование КАК СТРОКА (1000)), поле3, поле4 

УПОРЯДОЧИТЬ ПО поле3, поле4

Вылазит ошибка SQL Server (2005 sp4): Msg 8618, Level 16, State 2

The query processor could not produce a query plan because a worktable is required, and its minimum row size exceeds the maximum allowable of 8060 bytes. A typical reason why a worktable is required is a GROUP BY or ORDER BY clause in the query. If the query has a GROUP BY or ORDER BY clause, consider reducing the number and/or size of the fields in the clause. Consider using prefix (LEFT()) or hash (CHECKSUM()) of fields for grouping or prefix for ordering. Note however that this will change the behavior of the query.

Методом проб и ошибок, было выяснено, что если убрать из запроса поле1 и поле1.ПолноеНаименование, являющиеся реквизитами ТЧ документа с составным типом (два разных справочника с похожей структурой), ошибка пропадает. Так же, ошибка пропадает если убрать сортировку, но, поскольку в печатной форме важен порядок строк, варианты не подходят.

Пока что решили с помощью временных таблиц - результаты выполнения объединений помещаются во временную таблицу и затем уже сортируется выборка из этой временной таблицы.

Это так, чтобы не забыть самому.

Комментариев нет:

Отправить комментарий