存储过程 - 为什么重复代码路径!查询提示?

时间:2015-09-22 11:01:38

标签: sql sql-server

使用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 ...(取决于我先运行哪一个,这是最快的)

0 个答案:

没有答案