传递参数

时间:2015-06-22 19:27:53

标签: asp.net sql-server

我在webform中有一个CheckBoxList控件,它提供了所有7个工作日。 它成为SQL Server中存储过程的参数,作为WHERE子句的一部分:

AND (@Weekdays = 'MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY|SUNDAY|' 
    OR a.DAYOFWEEK in 
        (select value from dbo.convertDelimetedValueListIntoTable(@Weekdays, '|'))
    )

因为所有7个工作日的99%的时间仍然被检查,所以想法是忽略这个“AND”条件并加快查询速度。 所以我希望通过使用逻辑运算符OR,当第一部分返回true时,我能够将条件的第二部分短路。 但我发现SQL Server不使用短路。

有关如何在选择所有工作日时“绕过”该行的任何想法?

1 个答案:

答案 0 :(得分:0)

始终可以使用CASE语句:

WHERE CASE
  WHEN @Weekdays='MONDAY|TUESDAY|WEDNESDAY|THURSDAY|FRIDAY|SATURDAY|SUNDAY|' THEN
    1=1
  ELSE
    a.DAYOFWEEK IN (SELECT value FROM dbo.convertDelimetedValueListIntoTable(@Weekdays, '|'))
END