SQL Server データベースへの ODBC 接続があり、クエリで大きなレコード セットを返すため、ネイティブ 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
することもできますが、クエリが SQL Server ではなく ACE によって処理されるようになったため、パフォーマンスが低下します。
Access に格納されたパススルー クエリをネストする方法はありますか? それとも、SQL Server でストアド プロシージャを作成することがこれを達成する唯一の方法ですか?