У меня есть подключение ODBC к базе данных SQL Server, и, поскольку я возвращаю большие наборы записей с моими запросами, я обнаружил, что выполнять сквозные запросы быстрее, чем собственные запросы Access.
Но мне трудно писать и организовывать свои запросы, потому что, насколько мне известно, я не могу сохранить несколько разных сквозных запросов и объединить их в другой сквозной запрос. У меня есть доступ только для чтения к этой базе данных, поэтому я не могу сохранять хранимые процедуры в SQL Server, а затем ссылаться на них при передаче.
Например, предположим, что я хочу получить только те записи с максимальным значением o_version
из следующего запроса:
select d.o_filename,d.o_version,parent.o_projectname
from dms_doc d
left join
dms_proj p
on
d.o_projectno=p.o_projectno
left join
dms_proj parent
on
p.o_parentno=parent.o_projectno
where
p.o_projectname='ABC'
and
lower(left(right(d.o_filename,4),3))='xls'
and
charindex('xyz',lower(d.o_filename))=0
Я хочу получить только те записи с максимальным значением d.o_version
. Обычно я бы сохранил это как запрос с именем, например, abc
, а затем написал другой запрос abcMax
:
select * from abc
inner join
(select o_filename,o_projectname,max(o_version) as maxVersion from abc
group by o_filename,o_projectname) abc2
on
abc.o_filename=abc2.o_filename
and
abc.o_projectname=abc2.o_projectname
where
abc.o_version=abc2.maxVersion
Но если я не могу сохранить abc
как запрос, который можно использовать в сквозном запросе abcMax
, то мне не только придется копировать все тело abc
в abcMax
несколько раз, но и если я внесу какие-либо изменения в содержимое из abc
, то мне нужно сделать их для каждой копии, встроенной в abcMax
.
В качестве альтернативы можно написать abcMax
как обычный запрос Access, который вызывает abc
, но это снизит производительность, поскольку теперь запрос обрабатывается ACE, а не SQL Server.
Есть ли способ вложить сохраненные сквозные запросы в Access? Или создание хранимых процедур в SQL Server — единственный способ добиться этого?