从 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 恢复数据库不显示最新数据