所以这里有点奇怪...我有一个存储过程需要40秒才能运行.我将存储过程的内容复制到新的查询窗口,更改2个输入参数(这两个日期),以便声明和设置它们,然后运行查询.它基本上是即时的,低于1秒执行.唯一的区别是存储过程将2个日期作为参数.
任何人都知道是什么让这种情况发生的?
(我正在运行SQL Server 2005)
gbn*_*gbn 13
重新编译会嗅探参数,因此它没有任何区别.
这篇文章解释了我的陈述 ......
...在编译或重新编译期间嗅探参数值...
您需要屏蔽参数:
ALTER PROCEDURE [uspFoo]
@Date1 datetime,
@Date2 datetime
AS
BEGIN
DECLARE @IDate1 datetime, @IDate2 datetime;
SELECT @IDate1 = @Date1, @IDate2 = @Date2;
-- Stuff here that depends on @IDate1 and @IDate2
END
Run Code Online (Sandbox Code Playgroud)
正如 gbn 所说,这是一个参数嗅探问题。他建议的另一种方法是在查询的末尾包含以下行:
OPTION (RECOMPILE)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5952 次 |
| 最近记录: |