IsNull()关于bigint的最小值?

时间:2010-08-12 20:26:44

标签: sql sql-server tsql

为什么SQL Server中的以下表达式返回-9223372036854775808而不是123

我从存储过程中调用它,我无法传递空参数

declare @t bigint;
set @t = -9223372036854775808;  --min value for bigint / long
select ISNULL(@t, 123)

7 个答案:

答案 0 :(得分:11)

由于:

IF @t IS NOT NULL
  PRINT @t
ELSE
  PRINT 123

否定并不意味着该值为NULL。 NULL是完全没有任何值。

答案 1 :(得分:4)

因为@t不为空。

是什么让你认为bigint的最负值会被解释为null?

答案 2 :(得分:3)

如果@t为NULL,则ISNULL(@t, 123)函数返回123,否则返回@t。你可能想做这样的事情。

NULLIF(@t, -9223372036854775808)

如果@t等于-9223372036854775808,则返回NULL。如果两个表达式不相等,则NULLIF返回第一个表达式(@t)。

答案 3 :(得分:2)

要实现我想要实现的目标,请尝试以下方法:

declare @t bigint; 
set @t = -9223372036854775808;  --min value for bigint / long 
select ISNULL(NULLIF(@t, -9223372036854775808) , 123) 

或者这个:

declare @t bigint; 
set @t = -9223372036854775808;  --min value for bigint / long 
select case @t when -9223372036854775808 then 123 else @t end

答案 4 :(得分:1)

@t不为null,因为您为其分配了值。如果您希望ISNULL()返回123,请删除分配。

declare @t bigint;
select ISNULL(@t, 123)

答案 5 :(得分:1)

您似乎假设-9223372036854775808 IS NULL不正确。 ISNULL(@t, 123)只会在@t IS NULL时返回NULL,但它不为空,因为它的值为-9223372036854775808非NULL。

答案 6 :(得分:1)

ISNULL返回第一个非空值,它们都是非空的(有值),所以它返回第一个。