SQL Error(4145):在预期条件的上下文中指定的非布尔类型的表达式,靠近'('

时间:2017-04-04 06:12:07

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2012

使用以下语句检查字段是否为null,如果为null,则需要显示“Not Yet Approved”消息。否则,我希望获得下面提到的某些字段的连接结果。

select 
    iif(isnull(AppByENo1,'true'),'Not Yet Approved',AppByENo1+AppByDesg1+AppByDate1) as result
from myDB 
    where (E_No = '25')

但是在尝试运行sql查询时遇到上述错误。

请告知我犯错的地方以及如何解决这个问题。

3 个答案:

答案 0 :(得分:3)

试试这个:

select 
iif(isnull(AppByENo1,'true') = 'true','Not Yet Approved',AppByENo1+AppByDesg1+AppByDate1) as result
from myDB 
where (E_No = '25')

答案 1 :(得分:1)

由于连接空值会产生null(假设你打开了appropiate settings,你应该这样做),你可以在必要时使用一个简单的coalesce替换null:

select 
    COALESCE(AppByENo1+AppByDesg1+AppByDate1,'Not Yet Approved') as result
from myDB 
    where (E_No = '25')

如果你坚持使用iif方法,我很乐意:

iif(AppByENo1 is null,'Not Yet Approved',AppByENo1+AppByDesg1+AppByDate1)

E.g。一个实际的null测试,而不是尝试识别一个无法自然出现的标记字符串,并在isnull之后执行字符串比较。

答案 2 :(得分:1)

在SELECT子句中使用CASE语句而不是IFF:

  SELECT CASE WHEN ISNULL(AppByENo1,'true') = 'true' THEN 'Not Yet Approved'
     ELSE AppByENo1+AppByDesg1+AppByDate1 END as result
  FROM myDB WHERE E_No = '25'