ISNULL 在 SQL 服务器 2008 中给出了错误的值

ISNULL giving wrong value in SQL server 2008

我有一个场景来检查第一个变量是否为 null 然后显示另一个变量值,因为我正在使用 ISNULL 但它给出了错误 value.I 不知道我的错误代码如下:

DECLARE @str1 VARCHAR(5) = NULL,
        @str2 VARCHAR(10) = 'SQL Strings';

PRINT ISNULL(@str1, @str2);

但它只打印 SQL S

那是因为类型是由第一列决定的,即使是NULL。如果你这样做:

DECLARE @str1 VARCHAR(10) = NULL,
        @str2 VARCHAR(10) = 'SQL Strings';

PRINT ISNULL(@str1, @str2);

那么你会得到预期的答案。

文档说:

Replacement_value

Is the expression to be returned if check_expression is NULL. replacement_value must be of a type that is implicitly convertible to the type of check_expresssion.

换句话说,第二个值总是转换为第一个类型。请注意,这与 coalesce() 不同,其中 SQL 服务器更努力地确定类型。所以,coalesce(@str1, @str2) 符合您的预期(请参阅 here)。

ISNULL() Returns 与 check_expression 相同的数据类型,(第一个论点)。由于它只有 5 个字符,因此字符串被截断:

您需要改用 COALESCE:

DECLARE @str1 VARCHAR(5) = NULL,
        @str2 VARCHAR(10) = 'SQL Strings';

PRINT COALESCE(@str1, @str2);
PRINT ISNULL(@str1, @str2);