2012-11-15 41 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'