我正在尝试修复一个存储过程中的问题,并且遇到了一个困扰我的问题。
基本上,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
FatherCard
和CardCode
都是相同的类型(nvarchar
)和长度(50)。
如果我删除ISNULL
功能并简单地选择WHERE T0.CardCode = C0817
,那么它按预期工作。
是否有可能T0.FatherCard
实际上不是NULL用于ISNULL
评估的目的,并且返回一些其他值?
有两种可能。
- FatherCard可能有字符串值"NULL",而实际上不是 NULL。
- 您可以在C0817末尾有多余的空格,即
'C0817 '
查看使用:
SELECT '[' + CardCode + ']', ISNULL(FatherCard, 'Yes is NULL')
FROM OINV
WHERE RTRIM(CardCode) = 'C0817'
请使用
where columnname is null