【发布时间】:2019-12-06 09:29:09
【问题描述】:
我在 Access 中有一个非常简单的 UPDATE 查询,它应该更新底层 SQL Server。无论出于何种原因,Access 都不会将查询传递给服务器,而是自行处理它,即它对每一行执行更新查询。由于表很大,所以它会永远运行。
这是使用编辑器生成的查询。
UPDATE dbo_myTable
SET dbo_myTable.myColumn = 'A'
WHERE dbo_myTable.myOtherColumn = 123;
如果我运行与纯 SQL 相同的查询,它只需要几秒钟 - 正如预期的那样。
UPDATE dbo.myTable
SET dbo.myTable.myColumn = 'A'
WHERE dbo.myTable.myOtherColumn = 123;
问题不在于'A' 值。如果我将其从 'A' 更改为 Null,问题仍然存在。
背景:
我的实际更新查询更复杂,涉及连接和多个条件。在调试速度问题时,我可以将其分解为上面已经很慢的简单查询。
我使用 SQL Server Profiler 来确认我的猜测,即 access 对每一行进行查询,而不是将整个查询传递给 SQL Server。
相关:
不久前我有一个类似的问题:Force MS Access to send full query to SQL server。虽然问题是相同的 - 访问没有传递整个查询 - 解决方案必须有所不同,因为这里实际上没有任何特殊命令。
【问题讨论】:
-
myOtherColumn的数据类型是什么?
-
也许您错过了 myOtherColumn 上的索引?
-
myOtherColumn 包含整数值。它也有一个索引。但是由于如果通过查询,查询运行速度非常快,因此问题必须在 Access 中的某个地方。如果 myOtherColumn=123 产生约 100.000 行,Access 需要分钟,而直通查询在约 3 秒内完成。 (MS SQL 服务器有足够的 RAM 来容纳 RAM 中的整个表 - 实际上足以容纳 RAM 中大约 1/4 的 DB)。
标签: sql-server ms-access odbc