Особеността на изпълнението на функцията SUBSTRING() на езика за заявки
Разделът съдържа описание на характеристиките на изпълнението на функциятаSUBSTRING() на езика на заявките във версията клиент-сървър на работа и препоръките, произтичащи от нея за изграждане на заявки.
SUBSTRING() функция
В езика за заявки 1C:Enterprise функциятаSUBSTRING() във формат SUBSTRING(, , ) може да се приложи към данни от тип низ и ви позволява да изберете фрагмент, който започва с числовия знак (знаците в низа са номерирани от 1) и дължината на знаците. Резултатът от изчисляването на функциятаSUBSTRING() има тип низ с променлива дължина и дължината ще се счита за неограничена, ако има неограничена дължина и параметърът не е константа или надвишава 1024.
Изчисляване на функцията SUBSTRING() в SQL Server
Във версията клиент-сървър на операцията функциятаSUBSTRING() се реализира с помощта на функцията SUBSTRING() на съответния SQL оператор, предадена на сървъра на базата данни на SQL Server, който изчислява типа резултат на функцията SUBSTRING() според сложни правила в зависимост от типа и стойностите на нейните параметри, както и в зависимост от контекста, в който се използва.
В повечето случаи тези правила не влияят на изпълнението на заявка за 1C:Enterprise, но има случаи, когато максималната дължина на резултантния низ, изчислен от SQL Server, е от съществено значение за изпълнение на заявката. Важно е да имате предвид, че в някои контексти, където се използва функциятаSUBSTRING(), максималната дължина на нейния резултат може да бъде равна на максималната дължина на низ с ограничена дължина, която е 4000 знака в SQL Server. Това може да доведе до неочакван срив на заявката.
завършва необичайно със съобщението:
Грешка: Microsoft OLE DB доставчик за SQL Server: Предупреждение: Процесорът на заявка не можа да създадеплан за заявка от оптимизатора, тъй като общата дължина на всички колони в клаузата GROUP BY или ORDER BY надвишава 8000 байта. HRESULT=80040E14, SQLSTATE=42000, native=8618
Това е така, защото Microsoft SQL Server изчислява максималната дължина на низа, която се получава от израза:
SELECT WHEN View = &Person's LegalAddress THEN SUBSTRING(View, 0, 200) ELSE NULL END AS View,
се равнява на 4000 знака. Следователно дължината на запис, състоящ се от две такива полета, надвишава 8000 байта, разрешени за операция за сортиране.
Поради описаната характеристика на изпълнението на функцията SUBSTRING() на SQL Server, не се препоръчва използването на функциятаSUBSTRING() за преобразуване на низове с неограничена дължина в низове с ограничена дължина. Вместо това е по-добре да използвате оператора за прехвърлянеEXPRESS(). По-специално, горният пример може да бъде пренаписан като: