【问题标题】:How to get ASP Classic IF to check for empty or NULL values on multiple columns如何让 ASP Classic IF 检查多列上的空值或 NULL 值
【发布时间】:2024-01-20 07:39:01
【问题描述】:

在 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 %>

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

【问题讨论】:

    标签: vbscript asp-classic


    【解决方案1】:

    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,它工作得很好,虽然&gt; 应该改为= 以符合我的目的:-)
    • @StigKølbæk 抱歉在我的手机上写字已更正。您也可以将语句包装在 Not (....) 中以反转结果,这也是我在输入时错过的结果。
    【解决方案2】:

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

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

    如果代码为 null 并且不是 null 情况,您可以得到一个完美的代码,然后将其复制并再过去 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 代码替换它后面的所有内容。

    【讨论】:

    • Select 声明在我看来是错误的。
    • 你是对的,我的道歉是在我写的时候在 MYSQL 中工作的,我忘记了,你确实想用 "" 来做这个。我刚刚更换了它们。
    • 我认为现在应该没问题,但是我唯一担心会引发错误的 AND 的第二种情况。几天后我才能回到我的 ASP 测试环境,所以我很抱歉,但在那之前我会继续跟进。