ODBC 查询在 MS Access 中有效,但在 SQL Server 中超时

Posted

技术标签:

【中文标题】ODBC 查询在 MS Access 中有效,但在 SQL Server 中超时【英文标题】:ODBC Query Works in MS Access But Times-Out in SQL Server 【发布时间】:2019-10-19 18:23:04 【问题描述】:

我们在 MS Access 中有一个传递查询,需要将其转换为 SQL Server。

MS Access 中的查询使用 32 位 ODBC DSN 连接到 Redshift 数据库。查询很复杂(例如,有大约 20 个子查询),但在 MS Access 中运行良好的时间为 1 到 2 分钟。

我们将该查询转换为 SQL Server,并使用链接服务器连接(使用 64 位 ODBC DSN 和 MSDASQL 提供程序)连接到同一数据库。 SQL Server 中的查询将尝试运行超过 30 分钟,但最终会超时。

知道为什么它可以在 MS Access 而不是 SQL Server 中工作吗?

我认为这可能与使用 64 位与 32 位有关,因此我尝试添加 32 位 ODBC 作为链接服务器,但 SQL Server 不允许我这样做。

【问题讨论】:

不可能说没有查询,但 “有大约 20 个子查询” 听起来已经是一个竞争者了。 是的。不是我的查询,但必须这样做。无论如何,正如我在帖子中所说,它适用于 MS Access,所以它应该在 SQL Server 中。 Plus SQL 完全有能力处理这个问题。所以这不是查询。 让 SQL Server 完成通过链接服务器下载数据的工作肯定比让 redshift 数据库服务器使用其本地表完成工作要慢,就像在 MS Access PassThrough 场景中一样。顺便说一句:MS Access 与查询处理无关。它将查询发送到服务器,让服务器完成工作并接收结果行。 感谢 wolfgang。有没有办法让 SQL Server 以类似的方式运行? 据我所知,Access 直通查询的 T-SQL 等效项是使用OPENROWSET。如果您已经有一个 Redshift ODBC 驱动程序和一个可以作为 Access 直通查询调用的有效 Redshift-native SQL 查询,那么您可以在 SQL Server 的 OPENROWSET 调用中使用它。我尝试使用原生 PostgreSQL 查询 here 进行类似的操作,它似乎工作正常。 【参考方案1】:

鉴于反馈,我决定使用 Linked Sever 报废并改用 SSIS 来提取数据。感谢大家的时间和帮助。

【讨论】:

以上是关于ODBC 查询在 MS Access 中有效,但在 SQL Server 中超时的主要内容,如果未能解决你的问题,请参考以下文章

MS Access中的ODBC连接失败

在 MS Access 2007 中对 ODBC 表导入 sql 查询

MS Access 中通过 ODBC 连接 MS SQL 表的查询非常慢

MS Access 对 Oracle VIA ODBC 的直通查询

如何使用 MySQl 的 ODBC 连接器在 MS Access 中的 VBA 中执行和查询?

连接到 ODBC 时出现 MS Access 错误