【发布时间】: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 进行类似的操作,它似乎工作正常。
标签: sql-server ms-access odbc amazon-redshift linked-server