我有一个到 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
为可以在 pass-through query 中使用的查询abcMax
,那么我不仅必须将整个正文复制abc
到abcMax
几次,而且如果我对 的内容进行任何更改abc
,那么我需要将它们制作到嵌入的每个副本中abcMax
。
另一种方法是编写abcMax
为调用的常规 Access 查询abc
,但这会降低性能,因为查询现在由 ACE 而不是 SQL Server 处理。
有没有办法在 Access 中嵌套存储的传递查询?还是在 SQL Server 中创建存储过程是实现此目的的唯一方法?