2014-10-17 175 views
0

我寫一個SQL查詢和它的作品,但我只得到一半的結果:SQL Case語句不工作

(q1.VariableName LIKE 
     CASE WHEN @Variablename IS NULL THEN ('e%') 
     ELSE @Variablename 
     END) 

我想的事情是: 如果@Variablename是NOT NULL然後q1.VariableName = @變量名。

If it is NULL, 
then q1.VariableName like 'e%' 
or q1.VariableName like 'b%' and q1.VARIABLENAME not LIKE '%MAIL%' 

但是,我無法得到它。誰能告訴我,我哪裏錯了。

回答

0

如果你這樣做是where條款,你會過得更好使用,避免完全CASE使用:

((@Variablename IS NULL 
    and (q1.VariableName LIKE 'e%' 
      or q1.VariableName like 'b%' 
      and q1.VARIABLENAME not LIKE '%MAIL%')) 
or q1.VariableName = @Variablename) 

由於null是永不等於任何東西,當@Variablenamenull時,q1.VariableName = @Variablename)將始終評估爲false。

1

,或者可以在where子句中

where ( q1.VariableName = @Variablename) 
     OR (@VariableName IS NULL And (q1.VariableName like 'e%' 
or q1.VariableName like 'b%' and q1.VARIABLENAME not LIKE '%MAIL%')) 
2

您可以使用isnull()函數來檢查NULL。如果@VariableName爲NULL,則函數將用'e%'替換它。

WHERE q1.VariableName LIKE isnull(@VariableName, 'e%') 

如果它不是NULL,它必須等於q1.VariableName,前提是@VariableName不包含通配符。