使用SQL Server 2012
我有一个使用这两个场景调用的快速存储过程
exec GetResults
@SDate=N'15/90/2015', @EDate=N'22/09/2015',
@DateTimeOfEventStart=default, @DateTimeOfEventEnd=default
exec GetResults
@SDate=default, @EDate=default,
@DateTimeOfEventStart=N'15/90/2015', @DateTimeOfEventEnd=N'22/09/2015'
为了使两个查询都快速,我不得不拆分代码路径:
ALTER PROCEDURE dbo.GetResults
@SDate varchar(20)=NULL,
@EDate varchar(20)=NULL,
@DateTimeOfEventStart varchar(20)=NULL,
@DateTimeOfEventEnd varchar(20)=NULL
AS
IF @DateTimeOfEventStart IS NULL
BEGIN
SELECT ...
WHERE
(@SDate IS NULL OR (ImportTime>= (Convert(datetime,@SDate,105) + ' 00:00:00')))
AND (@EDate IS NULL OR (ImportTime<= (Convert(datetime,@EDate,105) + ' 23:59:59')))
AND (@DateTimeOfEventStart IS NULL OR (EventTime>= (Convert(datetime,@DateTimeOfEventStart,105) + ' 00:00:00')))
AND (@DateTimeOfEventEnd IS NULL OR (EventTime<= (Convert(datetime,@DateTimeOfEventEnd,105) + ' 23:59:59')))
END
ELSE
SELECT ... (exactly the same as above)
使用这种奇怪的方法,两个存储过程调用都能快速运行。感觉应该有更好的方式。可能会查询提示,但没有任何内容跳出来。
每个查询时间约为500毫秒。如果没有这个,我会看到2-4secs ...(取决于我先运行哪一个,这是最快的)