Ограничение на использование конструкции "ОБЪЕДИНИТЬ ВСЕ" в запросах
В запросах не следует выполнять соединений с помощью конструкции ОБЪЕДИНИТЬ ВСЕ строковых полей ограниченной длины с полями неограниченной длины, если результат объединяющего запроса упорядочивается с помощью конструкции УПОРЯДОЧИТЬ ПО.См. также
В запросах не следует выполнять соединений с помощью конструкции ОБЪЕДИНИТЬ ВСЕ строковых полей ограниченной длины с полями неограниченной длины, если результат объединяющего запроса упорядочивается с помощью конструкции УПОРЯДОЧИТЬ ПО.
Данное требование продиктовано особенностью выполнения подобных запросов на СУБД Microsoft SQL Server 2000 SP4 и необходимостью переносимости прикладных решений на эту СУБД.
Например, неправильно:
ВЫБРАТЬ Т1.Код КАК Поле1, Т1.Наименование КАК Поле2 ИЗ Справочник.Справочник1 КАК Т1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Т2.Код, Т2.РеквизитНеограниченнойДлины ИЗ Справочник.Справочник2 КАК Т2 УПОРЯДОЧИТЬ ПО Поле1
Примечание: упорядочивание по Поле2 невозможно, т.к. это поле неограниченной длины, и оно не может участвовать в сравнениях. Однако, достаточно наличия упорядочивания по любому другому полю.
Правильно:
1) отказаться от УПОРЯДОЧИТЬ ПО (а сортировку выполнить затем средствами встроенного языка - ТаблицаЗначений.Сортировать)
ВЫБРАТЬ Т1.Код КАК Поле1, Т1.Наименование КАК Поле2 ИЗ Справочник.Справочник1 КАК Т1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Т2.Код, Т2.РеквизитНеограниченнойДлины ИЗ Справочник.Справочник2 КАК Т2
2) использовать функцию ПОДСТРОКА (в случае вывода в список УПОРЯДОЧИТЬ ПО добавляется платформой автоматически к запросу)
ВЫБРАТЬ Т1.Код КАК Поле1, Т1.Наименование КАК Поле2 ИЗ Справочник.Справочник1 КАК Т1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Т2.Код, ПОДСТРОКА(Т2.РеквизитНеограниченнойДлины, 1, 1000) ИЗ Справочник.Справочник2 КАК Т2 УПОРЯДОЧИТЬ ПО Поле1
См. также
-
Использование ключевых слов "ОБЪЕДИНИТЬ" и "ОБЪЕДИНИТЬ ВСЕ" в запросах