2014-10-17 173 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不包含通配符。