我在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不使用短路。
有关如何在选择所有工作日时“绕过”该行的任何想法?
答案 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