2012-05-22 165 views
0

需要一些SQL的一些小幫助。我正在使用一個VARCHAR值來確定在WHERE子句中使用哪種邏輯的情況,但我在寫這個case語句時遇到了一些問題。T-SQL where子句case語句

where 
    (CASE WHEN @p_flag = 'ATA' 
      THEN (@p_start_ata IS NULL AND @p_end_ata IS NULL) OR (vso.poa_ata between @p_start_ata and @p_end_ata) 
     ELSE (@p_start_atd IS NULL AND @p_end_atd IS NULL) OR (vso.pol_atd between @p_start_atd and @p_end_atd) 
) 

線93的附近關鍵字的語法不正確 '是'。

它可能是一個小錯誤,但它讓我很沮喪。也許有更好的方式來寫這個?謝謝!

+1

CASE語句只能提供**值** - 不是整個代碼塊。你需要重新安排你的邏輯 –

回答

2

就像之前說過的,你不能像使用case語句那樣使用case語句。所以這可能是一個建議:

WHERE 
    (
     @p_flag = 'ATA' 
     AND 
      (
       (@p_start_ata IS NULL AND @p_end_ata) 
       OR (vso.poa_ata between @p_start_ata and @p_end_ata) 
      ) 
    ) 
    OR 
    (
     NOT @p_flag = 'ATA' 
     AND 
      (
       (@p_start_atd IS NULL AND @p_end_atd IS NULL) 
       OR (vso.pol_atd between @p_start_atd and @p_end_atd) 
      ) 
    ) 
+0

謝謝我最終使用這個。我正在尋找一個布爾條件,它會執行一個或另一個SQL塊,但不知道如何去寫在where子句中。這有幫助。 –

+0

@nickgowdy:沒問題。很高興幫助:P – Arion

0

你不能使用那樣的CASE

這是用來獲取值而不是限制。 Check this查看如何正確使用CASE


你的情況,你已經改變你的邏輯可能使用IF的和做的要SELECT的。