我的好奇心始终是我最好的,我在网上搜索了对此的解释并且没有任何结果(可能是因为我没有使用正确的条款。)
有人可以解释为什么SQL Server在执行以下操作时返回值为零(0),而不是空字符串('')。
DECLARE @I AS INT
SET @I = NULL
SELECT ISNULL(@I, '') -- 0
答案 0 :(得分:2)
因为@I被声明为INT
,所以空字符串隐式地CAST为整数,从而产生零。
答案 1 :(得分:2)
如声明here,ISNULL
的第二个参数是replacement_value,“必须是一个可以隐式转换为check_expresssion类型的类型”。将''
隐式转换为INT
会导致0。
答案 2 :(得分:0)
我知道这是一个老问题,但我想分享。
这里的问题不是因为' '
表达式的强制转换,不是因为 int 数据类型是不能为空,并且当您尝试{{ 1}} SQL设置默认值零(0)。
这就是为什么语句SET @I = NULL
在ISNULL(@I, '')
中找不到任何空值并返回其值(0)的原因。
希望它可以帮助某个人。