如果MyTable.MyColumn
和@MyVar
中的值为NULL
,则以下语句会返回什么内容?
ISNULL(@MyVar, MyTable.MyColumn)
答案 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)