0

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、 の本体全体abcabcMax数回にコピーする必要があるだけでなく、 の内容に変更を加えるとabc、に埋め込まれているすべてのコピーにそれらを作成する必要がありますabcMax

別の方法abcMaxとして、 を呼び出す通常の Access クエリとして記述abcすることもできますが、クエリが SQL Server ではなく ACE によって処理されるようになったため、パフォーマンスが低下します。

Access に格納されたパススルー クエリをネストする方法はありますか? それとも、SQL Server でストアド プロシージャを作成することがこれを達成する唯一の方法ですか?

4

1 に答える 1