SQL 服务器 - NULL 与 IF 条件下的空白 - ISNULL 与 COALESCE

SQL Server - NULL vs blank in IF condition - ISNULL vs COALESCE

我希望在这种情况下打印 ELSE 部分。但事实并非如此。如果输入为空 '',它会起作用。但是对于 null,它失败了。即使 ISNULLCOALESCE 也是一样的。你能解释一下逻辑吗?

DECLARE @V_MY_VAR VARCHAR(50) = NULL;
IF ISNULL(@V_MY_VAR,'X') = 'HELLO'
    BEGIN
        PRINT 'INSIDE IF - '+ @V_MY_VAR;
    END;
ELSE
    BEGIN
        PRINT 'INSIDE ELSE - '+ @V_MY_VAR;
    END;

由于您的变量为 null,因此您不能将它与 if 或 else 子句中的字符串连接起来。 你必须删除它...

DECLARE @V_MY_VAR VARCHAR(50) = NULL;
IF ISNULL(@V_MY_VAR,'X') = 'HELLO'
BEGIN
    PRINT 'INSIDE IF - ';
END;
ELSE
BEGIN
    PRINT 'INSIDE ELSE - ';
END;

...或将其替换为非空值,例如使用您建议的 ISNULL。

DECLARE @V_MY_VAR VARCHAR(50) = NULL;
IF ISNULL(@V_MY_VAR,'X') = 'HELLO'
BEGIN
    PRINT 'INSIDE IF - '+ ISNULL(@V_MY_VAR,1);
END;
ELSE
BEGIN
    PRINT 'INSIDE ELSE - '+ ISNULL(@V_MY_VAR,2);
END;

您可以在这里进行测试:db<>fiddle