Имам 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 е единственият начин да се постигне това?