所以这里有点奇怪……
我有一个存储过程需要40秒才能运行.
我将存储过程的内容复制到一个新的查询窗口,更改2个输入参数(这两个日期),以便声明和设置它们,然后运行查询.它基本上是即时的,低于1秒执行.
唯一的区别是存储过程将2个日期作为参数.
我有一个存储过程需要40秒才能运行.
我将存储过程的内容复制到一个新的查询窗口,更改2个输入参数(这两个日期),以便声明和设置它们,然后运行查询.它基本上是即时的,低于1秒执行.
唯一的区别是存储过程将2个日期作为参数.
任何人都知道是什么让这种情况发生的?
(我正在运行sql Server 2005)
解决方法
重新编译会嗅探参数,因此它没有任何区别.
This article explains my statement …
…parameter values are sniffed during
compilation or recompilation…
您需要屏蔽参数:
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