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);
我有一个场景来检查第一个变量是否为 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);