WHERE子句中的isnull函数



我正在尝试修复一个存储过程中的问题,并且遇到了一个困扰我的问题。

基本上,isnull在T0中的一条记录中按预期工作,但在另一条记录中却没有,其中T0.FatherCard都为NULL。我不明白为什么。

SELECT *
FROM OINV T0
WHERE ISNULL(T0.FatherCard, T0.CardCode) = 'C0189'

按预期返回一整行数据。

SELECT *
FROM OINV T0
WHERE ISNULL(T0.FatherCard, T0.CardCode) = 'C0817'

返回什么。

两种情况下,FatherCard = NULL

CardCode    FatherCard  Table
------------------------------
C0189       NULL        OINV
C0817       NULL        OINV

FatherCardCardCode都是相同的类型(nvarchar)和长度(50)。

如果我删除ISNULL功能并简单地选择WHERE T0.CardCode = C0817,那么它按预期工作。

是否有可能T0.FatherCard实际上不是NULL用于ISNULL评估的目的,并且返回一些其他值?

有两种可能。

  1. FatherCard可能有字符串值"NULL",而实际上不是 NULL。
  2. 您可以在C0817末尾有多余的空格,即'C0817 '

查看使用:

SELECT  '[' + CardCode + ']', ISNULL(FatherCard, 'Yes is NULL')
FROM    OINV
WHERE   RTRIM(CardCode) = 'C0817'

请使用

where columnname is null

最新更新