如果MyTable.MyColumn
和中的值@MyVar
是NULL
,以下语句返回什么?
ISNULL(@MyVar, MyTable.MyColumn)
create table MyTable
(
MyColumn int
)
insert into MyTable default values
declare @MyVar int
select ISNULL(@MyVar, MyTable.MyColumn)
from MyTable
结果:
-----------
NULL
其他人已经解释了会发生什么。万一您不想要那些 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)
当然,它会返回 NULL。:) 也很容易测试。对此的总体需求是什么?例如,如果您需要确保至少返回一些值,您有几个选择。例如案例:
SELECT CASE WHEN @MyVar IS NULL
THEN ISNULL(MyTable.MyColumn, 'replacementvalue')
ELSE @MyVar
END AS RESULT
FROM MyTable
我们需要在这里更多地了解真正的问题。
试试这个 :-)
select ISNULL(null,null)