-2

如果MyTable.MyColumn和中的值@MyVarNULL,以下语句返回什么?

ISNULL(@MyVar, MyTable.MyColumn)

4

4 回答 4

10
create table MyTable
(
  MyColumn int
)

insert into MyTable default values

declare @MyVar int

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

结果:

-----------
NULL
于 2013-03-19T09:41:25.430 回答
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)
    
于 2013-03-19T14:38:33.857 回答
3

当然,它会返回 NULL。:) 也很容易测试。对此的总体需求是什么?例如,如果您需要确保至少返回一些值,您有几个选择。例如案例:

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

我们需要在这里更多地了解真正的问题。

于 2013-03-19T09:44:41.103 回答
1

试试这个 :-)

select ISNULL(null,null) 
于 2013-03-19T14:07:32.663 回答