WHERE 子句中的 isnull 函数

isnull function in WHERE clause

我正在尝试解决存储过程中的问题,但遇到了一个让我烦恼的问题。

基本上,isnull 对 T0 中的一条记录按预期工作,但在另一条记录中则不然,两者均 T0.FatherCard 为 NULL。我不明白为什么。

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

Returns 符合预期的一整行数据。

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

Returns 没什么。我期待一整行数据。

在这两种情况下,FatherCard = NULL

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

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

如果我删除 ISNULL 函数并简单地 select WHERE T0.CardCode = C0817 那么它会按预期工作。

是否有可能 T0.FatherCard 对于 ISNULL 评估而言实际上不是 NULL,并且正在返回其他一些值?

请使用

where columnname is null

有2种可能。

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

检查使用:

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