SQL Server 2014中的ISNULL()函数出现意外行为

SQL Server 2014中的ISNULL()函数出现意外行为,sql,sql-server,Sql,Sql Server,我认为结果是“ABCDEFGHIJ”,但结果是“ABCDE” 这是函数的正常行为还是我遗漏了什么?使用函数:不确定为什么IsNULL返回这样的输出,但是假设在检查ISNULLP1,P2时只考虑第一个参数的大小。 Declare @Var1 Varchar(5) = Null Declare @Var2 Varchar(10) = 'ABCDEFGHIJ' SELECT ISNULL(@Var1, @Var2) AS Result 使用函数:不知道为什么IsNULL返回这样的输出,但是假设在检

我认为结果是“ABCDEFGHIJ”,但结果是“ABCDE”

这是函数的正常行为还是我遗漏了什么?

使用函数:不确定为什么IsNULL返回这样的输出,但是假设在检查ISNULLP1,P2时只考虑第一个参数的大小。
Declare @Var1 Varchar(5) = Null
Declare @Var2 Varchar(10) = 'ABCDEFGHIJ'

SELECT ISNULL(@Var1, @Var2) AS Result

使用函数:不知道为什么IsNULL返回这样的输出,但是假设在检查ISNULLP1、P2时,它只考虑第一个参数的大小。

Declare @Var1 Varchar(5) = Null
Declare @Var2 Varchar(10) = 'ABCDEFGHIJ'

SELECT ISNULL(@Var1, @Var2) AS Result

这是因为源变量的长度为5,所以它截断了另一部分

SELECT COALESCE(@Var1, @Var2) AS Result

这是因为源变量的长度为5,所以它截断了另一部分

SELECT COALESCE(@Var1, @Var2) AS Result

你使用了varchar5这就是为什么会发生这种情况

下面使用

Declare @Var1 Varchar(10) = Null
Declare @Var2 Varchar(10) = 'ABCDEFGHIJ'

SELECT ISNULL(@Var1, @Var2) AS Result

这将给出您预期的答案

您已经使用了varchar5,这就是为什么会发生这种情况

下面使用

Declare @Var1 Varchar(10) = Null
Declare @Var2 Varchar(10) = 'ABCDEFGHIJ'

SELECT ISNULL(@Var1, @Var2) AS Result
这将给出您期望的答案

您应该使用coalesce函数,因为coalesce函数返回其参数中的第一个非空值

 Declare @Var1 Varchar(50) = Null
或者您可以更改声明变量的大小。两者都将提供预期的输出。

您应该使用coalesce函数,因为coalesce函数返回其参数中的第一个非空值

 Declare @Var1 Varchar(50) = Null

或者您可以更改声明变量的大小。两者都将提供预期的输出。

回答您的问题,是的,这是ISNULL的正常行为。它采用第一个表达式的类型

此处引用

如果check_表达式的值不为空,则返回该值; 否则,替换值在隐式调用后返回 如果类型不同,则转换为check_表达式的类型。 如果替换值长于,则可以截断替换值 检查你的表情


作为替代,您应该使用COALESCE来回答您的问题,是的,这是ISNULL的正常行为。它采用第一个表达式的类型

此处引用

如果check_表达式的值不为空,则返回该值; 否则,替换值在隐式调用后返回 如果类型不同,则转换为check_表达式的类型。 如果替换值长于,则可以截断替换值 检查你的表情

作为替代方案,您应该使用COALESCE

ISNULL@Var1,如果@var1为空,@Var2语句将@Var2的值复制到@var1,并且@var1的长度为5,这就是为什么它只显示前五个字符。

ISNULL@Var1,如果@var1为空,且@var1的长度为5,@Var2语句将@Var2的值复制到@var1,这就是为什么它只显示前五个字符