![为什么我的 Access 2010 ADP 在连接到 MSSQL 2008 R2 时不过滤其 SQL 语句?](https://linux22.com/image/1333661/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%20Access%202010%20ADP%20%E5%9C%A8%E8%BF%9E%E6%8E%A5%E5%88%B0%20MSSQL%202008%20R2%20%E6%97%B6%E4%B8%8D%E8%BF%87%E6%BB%A4%E5%85%B6%20SQL%20%E8%AF%AD%E5%8F%A5%EF%BC%9F.png)
我使用 MSSQL MS 执行 SQL Server 2008 R2 数据库上的大多数管理任务,但我发现使用 Access(通过 ADP,而不是链接表)查看和编辑原始表数据效率更高。(这仅供系统管理员使用,当然,用户访问是通过 Web 应用程序进行的,并且所讨论的表相对较小,可能只有几千行。)
然而,自从切换到 Access 2010 以来,性能喝醉了当我在 ADP 中过滤和排序表格并通过 Profiler 观察它时,我知道为什么——Access 不仅仅是不是为 MSSQL准备一个WHERE
子句来实现过滤器,它会多次请求原始表,无论使用哪种过滤器。换句话说,它会执行如下操作:
SET ROWCOUNT 10000
SELECT "dbo"."MYTABLE".* FROM "dbo"."MYTABLE"
SET ROWCOUNT 0
SELECT "dbo"."MYTABLE".* FROM "dbo"."MYTABLE"
SET ROWCOUNT 10000
SELECT "dbo"."MYTABLE".* FROM "dbo"."MYTABLE"
SET ROWCOUNT 0
SELECT "dbo"."MYTABLE".* FROM "dbo"."MYTABLE"
(我省略了一些读取扩展列属性的额外语句。)
Access 在这里到底在做什么?我怎样才能让它使用 SQL Server 执行筛选和排序,以及如何不是每次更改表过滤器时都要进行多次往返?