'<>'之间的区别和'不是'在TSQL中?

时间:2010-09-07 07:27:17

标签: tsql

我不明白。

我有这个表达,但没有用。

IF @LocationName <> NULL AND
@Latitude <> NULL AND
@Longitude <> NULL AND
@Zoom <> NULL AND
@MapTypeId <> NULL
BEGIN
... 
END

我把它改成了这个表达式。

IF @LocationName Is NOT NULL  AND
@Latitude Is NOT NULL AND
@Longitude Is NOT NULL AND
@Zoom Is NOT NULL AND
@MapTypeId Is NOT NULL
BEGIN
... 
END

它有效......

WTH?

5 个答案:

答案 0 :(得分:7)

正如所料。

与NULL的每次比较总是UNKNOWN(等于false)。

也称为Three-valued logic(维基百科)和MSDN/SQL Server

答案 1 :(得分:3)

处理NULL值时,不能使用比较运算符。 NULL实际上没有任何价值,因此您无法对其进行比较 - 当您尝试比较时,它会返回UNKOWN

您必须使用IS NULLIS NOT NULL

IS [NOT] NULL

Null Values

答案 2 :(得分:3)

您无法检查某些内容是否与NULL相等,因为NULL的值和类型未知。

您必须检查IS NULLIS NOT NULL

答案 3 :(得分:2)

<>的行为可以通过设置SET ANSI_NULLS来修改。

编辑:但是,不建议这样做,如上页中的文字所示。

答案 4 :(得分:1)

那是ternary logic。它是主要的SQL功能之一,你应该永远记住它。