从 MS SQL SERVER 和 MS ACCESS 调用存储过程的结果之间的差异

Posted

技术标签:

【中文标题】从 MS SQL SERVER 和 MS ACCESS 调用存储过程的结果之间的差异【英文标题】:Difference between results of calls stored procedure from MS SQL SERVER and MS ACCESS 【发布时间】:2016-04-28 11:38:33 【问题描述】:

SP 是表单的 RecordSource。 当打开表单时执行 SP 并在查询超时后,连接正在关闭,什么都没有。 如果 SP 从 SSMS 执行,它将执行大约 2 秒并返回一组记录。 正如我所看到的 SSMS Profiler 调用是相同的,但读取值计数(从 Access 执行)> 2800 万,并且来自 SSMS 大约 70000。 帮帮我,我很困惑。 带分析器的屏幕 http://take.ms/u7tTy

【问题讨论】:

这里只是一个猜测:读取计数!= 行数。可能是 SP 的错误查询计划导致此问题,例如参数嗅探。 @BIDeveloper,来自 Access 的 2800 万次读取 Could be an issue with bad query plans for the SP causing this, such as parameter sniffing.@tobypls,这是什么意思? @anatol 看看这个***.com/questions/6585417/…(在这种情况下,Web 类似于您的情况下的 MS Access) 如果您发布 SQL Server Profiler 输出的屏幕图片会有所帮助。 【参考方案1】:

@tobypls, 非常感谢 - 您的链接很有帮助。 简单的解决方案是重写(例如)

来自

ALTER PROCEDURE [dbo].[sproc] 
@param1 int,  
AS  
SELECT * FROM Table WHERE ID = @param1  

ALTER PROCEDURE [dbo].[sproc] 
@param1 int,
AS
DECLARE @param1a int
SET @param1a = @param1
SELECT * FROM Table WHERE ID = @param1a  

我从this post 得到它。

但如果你需要全面了解麻烦,那么你必须阅读非常棒的文章Slow in the Application, Fast in SSMS? Understanding Performance Mysteries

【讨论】:

以上是关于从 MS SQL SERVER 和 MS ACCESS 调用存储过程的结果之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

从 Camel 和 Spring Boot 到 MS SQL Server 的 JDBC

MSYSGIT BASH : 对 MS SQL Server 执行 SQL

将存储过程从 MS SQL Server 转换为 Informix

MS SQL Server 从 MDF 和 LDF 恢复数据库不显示最新数据

从 SQL Server 2008 迁移到 MS access 2007

将数据从 MS Access 传输到 SQL Server