SQL 服务器 - NULL 与 IF 条件下的空白 - ISNULL 与 COALESCE
SQL Server - NULL vs blank in IF condition - ISNULL vs COALESCE
我希望在这种情况下打印 ELSE 部分。但事实并非如此。如果输入为空 ''
,它会起作用。但是对于 null
,它失败了。即使 ISNULL
和 COALESCE
也是一样的。你能解释一下逻辑吗?
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
我希望在这种情况下打印 ELSE 部分。但事实并非如此。如果输入为空 ''
,它会起作用。但是对于 null
,它失败了。即使 ISNULL
和 COALESCE
也是一样的。你能解释一下逻辑吗?
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