如何让 ASP Classic IF 检查多列上的空值或 NULL 值

问题描述

在 MS sql 表中,我有 4 列,它们可以有 3 个不同的值(yesemptyNULL),在这 4 列中我需要使用 ASP Classic如果它们都为空或 NULL。

我有 Col1、Col2、Col3 和 Col4,如果它们都是空的或 NULL(或不同于 yes),它应该向屏幕写一些东西,所以我尝试用以下:

<% IF objFlowVAR("Col1") = "" OR IsNull(objFlowVAR("Col1")) AND objFlowVAR("Col2") = "" OR IsNull(objFlowVAR("Col2")) AND objFlowVAR("Col3") = "" OR IsNull(objFlowVAR("Col3")) AND objFlowVAR("Col4") = "" OR IsNull(objFlowVAR("Col4")) THEN %>Some Text<% END IF %>
<% IF objFlowVAR("Col1") <> "yes" AND objFlowVAR("Col2") <> "yes" AND objFlowVAR("Col3") <> "yes" AND objFlowVAR("Col4") <> "yes" THEN %>Some Text<% END IF %>

但这没有给我我需要的结果..我做错了什么?

解决方法

NullDbNull 是不同的,所以不要期望 IsNull() 会像您期望的那样行事。

我发现最好的方法是先清理值;

Dim col1,col2,col3,col4
col1 = objFlowVAR("Col1") & ""
col2 = objFlowVAR("Col2") & ""
col3 = objFlowVAR("Col3") & ""
col4 = objFlowVAR("Col4") & ""
If Len(col1) = 0 And Len(col2) = 0 And Len(col3) = 0 And Len(col4) = 0 Then
  'All values are empty,so do sonething.
End If
,

我不确定你是否需要做一件事,如果它为空,另一件事如果它不为空,但使用 user692942 的方法而不是做 IsNull() 并只检查长度以查看它是否更大比 0 确实是最好的方法,特别是如果您只将 'yes' 作为唯一的字符串处理。如果您确实有其他选项,而不仅仅是稍后,那么将其分解成如下所示的部分可能对您有用,但我基于他上面的示例,因此您当然需要使用 dims 和相同的变量设置。如果必须,您甚至可以执行嵌套的 IF/THEN,但如果您有更精细的结果组合,使用 CASE SELECT 会更有效。但是在代码上:

    IF Len(col1) > 0  Then
      'col1 is NOT NULL
    ELSE
      'col1 is NULL
    END IF

如果它为空并且不是空的情况,你可以得到一个完美的代码,然后复制它并通过它3次,然后将其他3上的数字更改为col2和col3 等等,但如果这是您所需要的,那么可以很容易地快速完成整个事情。

因为有人看到这很有用,所以我想我会在“CASE”中也涵盖一个 CASE SELECT 需要更高级的逻辑,例如它是 NULL 还是 '' 空或不同的字符串类型可能很重要,如以及默认的其他一切捕手,非常方便的东西。

Select Case col1
   Case col1 = "" : 'code to do when its actually empty
   Case col1 = Len(col1) > 0 AND col1 <> "" : 'code to do when its NULL
   Case col1 = "yes" :  'code to do when its set to 'yes'
   Case col1 = "no" :  'code to do when its set to 'no'
Case Else
   'code to do when everything else not defined happens
End Select 

'执行部分的代码只是注释行,你可以用你想要发生的 ASP 代码替换它后面的所有内容。