ISNULL当替换值为NULL时会发生什么?

时间:2013-03-19 09:30:59

标签: sql-server null

如果MyTable.MyColumn@MyVar中的值为NULL,则以下语句会返回什么内容?

ISNULL(@MyVar, MyTable.MyColumn)

4 个答案:

答案 0 :(得分:10)

create table MyTable
(
  MyColumn int
)

insert into MyTable default values

declare @MyVar int

select ISNULL(@MyVar, MyTable.MyColumn)
from MyTable

结果:

-----------
NULL

答案 1 :(得分:6)

其他人已经解释了会发生什么。解决方案,以防您不想要那些Null。

  • 如果表达式位于SELECT列表中 - 并且您不希望NULL出现在结果中,则可以使用COALESCE()函数,该函数可能需要更多超过2个参数:

    COALESCE(@MyVar, MyTable.MyColumn, another_value)
    
  • 如果你有条件,就像你在评论中提到的那样:

    WHERE MyTable.MyColumn = ISNULL(@MyVar, MyTable.MyColumn)
    

    你可以替换它(假设你希望当TRUE为空时,条件保持@MyVar,无论MyTable.MyColumn是否为空):

    WHERE (MyTable.MyColumn = @MyVar OR @MyVar IS NULL)
    

答案 2 :(得分:3)

当然会返回NULL。 :)非常容易测试。总体需求是什么?如果您需要确保至少返回一些值,则可以选择几个选项。例如:

SELECT CASE WHEN @MyVar IS NULL 
   THEN ISNULL(MyTable.MyColumn, 'replacementvalue') 
   ELSE @MyVar
END AS RESULT
FROM MyTable

我们需要在这里了解更多关于真正问题的信息。

答案 3 :(得分:1)

试试这个: - )

select ISNULL(null,null)