2012-11-15 131 views
0

我正在使用SQLServer 2008并遇到此问题。我有一个功能,用户可以从菜单中选择多个日期。他们还可以勾选“选择所有日期”复选框。条件where子句SQLServer

如果他们选中复选框,我的查询应该只返回给定日期的结果。因此执行一个WHERE子句。 如果他们没有选择复选框,但选择了一个或多个日期;该查询应该使用where子句执行。

我有2个参数。 -SelectedDates(如 '2012年11月15日', '2012年11月15日'。) -AllDates( 'X' 或 '')

通常情况下,查询对子级是这样的:

SELECT * FROM x 
WHERE x.date in ([Param.1]) 

所以我的问题:如何在WHERE子句不需要的情况下适应查询。

FYI:在[Param.1]符号是我在工作环境中使用

+2

'... OR AllDates ='X''? –

+0

你必须使用T-SQL(一个带有逻辑的存储过程,例如,如果参数值是X,那么你可以执行一个语句,否则执行一个语句),请参阅http://msdn.microsoft.com/en-us/library/ms182717。 ASPX –

回答

2

简单,使用一个或条款,如果alldates,则它将从所有的日期返回的数据是这样的:如果Param.2检查

SELECT * FROM x 
WHERE x.date in ([Param.1]) OR ([Param.2]) = 'X' 

(“X”),它会忽略的结果第一个条件导致您使用OR子句。

0

这里AllDates是第二个参数,当用户选中该复选框所有日期

IF(AllDates is not null) 
SELECT * FROM x 
ELSE 
SELECT * FROM x 
WHERE x.date in ([Param.1]) 
1

如果所有您的日期是存在于控制,检查所有还可以生成日期,以便你仍然可以使用WHERE IN(“DATE1”,......“DATEN”)

你也有这样的替代

WHERE x.Date IN (.....) OR AllDates = 'X'