WHERE子句中的isnull函数

时间:2016-11-04 05:37:06

标签: sql sql-server-2014 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评估,ISNULL是否可能实际上不是NULL,并且返回一些其他值?

2 个答案:

答案 0 :(得分:2)

有两种可能性。

  1. FatherCard的字符串值可能为“NULL”,实际上 为NULL。
  2. 你可能在C0817结束时有无关的空间。 'C0817 '
  3. 检查使用:

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

答案 1 :(得分:0)

请使用

where columnname is null