дело в том что использовать f_ExecSQLSelect... для записи, обновления, удаления данных можно только через вызов своих хп- что делать не очень правильно и не документировано - хотя сами мы и делаем и пользуемся
Было бы лучше хранить данные в текущей структуре Лоции т.е. таблица - объект, колонки - атрибуты.
т.е. при старте мы забиваем какой то служебный объект всеми нужными данными о пользователе или хотя бы одним указателем на объект User - а потом просто читаем их.
но тут вопрос -
как сделать такой объект
локальным по отношению к текущему сеансу-вроде
никак
по большому счету речь идет о м
аксимальном сокращении времени сопоставления User базы-User объект. И мы готовы терять на это ~.5 сек следующим запросом (через f_ExecSQLSelect... т.е.
не через автоматическую форму)
Код: Выделить всё
Select rw.id
From lsdbo.object_reference_view rw,
lsdbo.object_type_view tw
Where (rw.type_id = tw.id)
AND ((tw.mnemo = 'тип объекта'
AND rw.id in
--только работающие сотрудники
(Select av.object_id
From lsdbo.attrib_value_view av,
lsdbo.value_numeric_view vv
Where av.value_id = vv.id and
av.attrib_id = 100000019000005 and
vv.attrib_id = 100000019000005 AND
vv.Value > -1))
AND rw.id in
--только тот сотрудник - чей номер ID (атрибут) совпадает с id User'a базы
(Select av.object_id
From lsdbo.attrib_value_view av,
lsdbo.value_numeric_view vv
Where av.value_id = vv.id and
av.attrib_id = 100004060200000 and
vv.attrib_id = 100004060200000 AND
vv.Value = 35));
кстати проверку на работающих тоже можно снять - тогда еще быстрее.
-а можно например хранить соответствие User базы User объект не в каждом объекте персонально а в каком нибудь специальном объекте (например для тех у кого сотрудников >1000) - тогда выборка еще короче
-а можно вообще это соответствие хранить во внешнем файле
да как угодно
но мы оставили все как есть Объект User хранящий в себе id User'a базы
В любом случае визуально сама процедура длиннее и потеря 0.5 сек на запрос - вообще не видна
